基本概念
按某种规则去匹配符合条件的字符串,这种规则就是正则表达
RegExp对象 //
\b 单词边界 g 全局匹配 i忽略大小写 m多行匹配
构造函数
var reg = new RegExp('\\bis\\b', 'g');
元字符 特殊含义字符 \cX Ctrl+X
字符类 [abc]
字符类取反 [^abc]
范围类 数字[0-9-] 字母[a-zA-Z] //匹配横线在最后加一个-
预定义类 \d = [0-9] \D = [^0-9] \s = 空白符[\t\n\x0B\f\r] \w = [a-zA-Z_0-9]单词字符(字母数字下划线) //注:大写为取反
量词 ?0/1 +1/n *0/n {n}n {n,m}n-m {n,}n++ {0,n}最多n
贪婪模式 '12345678'.replace(/\d{3,6}/g,'X') 尽量多的匹配 结果X78
非贪婪模式(量词后加?) '12345678'.replace(/\d{3,6}?/g,'X') 尽量少的匹配 结果XX78
分组 (zxc){3}
或 | byr(on|ca)sper 结果 byronsper byrcasper 都可以匹配法到
反向引用 2015-12-25 ==> 12/25/2015 '2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1')
忽略分组 前面加?: (?:Byron).(ok) ok为$1
正则表达式从文本头部像尾部开始解析,文本尾部为前。
前瞻 向前检查是否符合断言 符合正向匹配
后顾 向后检查(js不支持)
正想前瞻:exp(?=assert) \w(?=\d) 单词字符后面是数字 匹配该单词
负向前瞻:exp(?!assert) \w(!=\d) 相反
对象属性: global ignoreCase multiline 默认false
lastIndex:下一次搜索的开始位置
score:正则表达式的文本对象
函数(test&exec)
RegExp.protatype.test(str) 测试有无匹配结果 true false;
例子:var reg = /\w/; reg.test('a'); return true; teg.test('$'); return false;
RegExp.protatype.exec(str).index(匹配文本的第一个字符).toString()(文本,组内容,第二个组内容,···);
var reg = /\d(\w)\d/g;
var ts = '$1a2b3c4d';
while(ret = reg.exec(ts)){
console.log(ret);
} //[1a2,a]\n[3c4,c]
字符串对象方法
String.protatype.search(reg) 检索字符串中指定子字符串或正则表达式相匹配的子字符串,返回第一个匹配结果 查不到返回-1 不执行全局(忽略g)且每次从第一个字符开始
(数字(会尝试转成正则),字符串,正则表达式都可以)
String.protatype.match(reg) 找到一个或多个与regexp匹配的文本 g很重要
//注:非全局与exec 相同 string和 reg掉了个个儿。
全局只返回字符串数组 不返回分组信息 没有index,lastIndex属性
ts.match(reg);//
String.protatype.split(reg)
'a,b,c,d'.split(',')//(/,/) => ["a","b","c","d"]
'a1b2c3d4e'.split(/\d/g) => ["a","b","c","d","e"]
String.protatype.replace(reg,funtion(match,group1,group2,index,origin){
return group1+group3;
});//group2会消失
// match 匹配到的字符串
// group 分组(没有的话不写)
// index 匹配的第一个字符位置
// origin 原字符串
网友评论