在线工具:http://regexper.com
new RegExp(pattern, attributes); 参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。 参数 attributes 是一个可选的字符串,包含属性 “g”、”i” 和 “m”,分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。 - g :global 全文搜索,不添加,搜索到第一个匹配停止 - i :ignore case 忽略大小写,默认大小写敏感 - m :multiple lines多行搜索
var Reg = new RegExp('\\bis\\b','g'); var str = 'This is a dog He is a boy', new_str = str.replace(Reg,'IS'); alert(str+">>>>"+new_str);用[]构建一个简单的类 类是指符合某些特定性的对象,一个泛指,而不是特指某个字符,表达式[abc]把字符a或b或c归为一类,表达式可以匹配这类的字符
'a1b2c3d4'.replace(/[abc]/g,'X') "X1X2X3d4"使用元字符^创建反向类/负向类 反向类的意思是不属于某类的内容 表达式[^abc]表示不是字符a或b或c的内容
'a1b2c3d4'.replace(/[^abc]/g,'X') "aXbXcXXX"[a-z] 从a到z的所有小写字母
'a1b2c3d4e5'.replace(/[a-z]/g,'Q') "Q1Q2Q3Q4Q5"[a-zA-Z] 从a到Z的所有大小写字母
'a1b2c3d4e5DGDGDGFD'.replace(/[a-z]/g,'Q') "Q1Q2Q3Q4Q5DGDGDGFD"注意如果本身就像匹配- [0-9-]
'2016-04-09'.replace(/[0-9]/g,'A') "AAAA-AA-AA" '2016-04-09'.replace(/[0-9-]/g,'A') "AAAAAAAAAA". == [^\r\n] 除了回车符和换行符之外的所有字符 \d == [0-9] 数字字符 \D == [^0-9] 非数字字符 \s == [\t\n\x0B\f\r] 空白符 \S == [^\t\n\x0B\f\r] 非空白符 \w == [a-zA-Z_0-9] 单词字符(字母数字下划线) \W == [^a-zA-Z_0-9] 非单词字符
^ 以XXX开始 $ 以XXX结束 \b 单词边界 \B 非单词边界
'@123@456@'.replace(/\@./g,'X') "X23X56@" '@123@456@'.replace(/^\@./g,'X') "X23@456@" '@123@456@'.replace(/.\@/g,'X') "@12X45X" '@123@456@'.replace(/.\@$/g,'X') "@123@45X" 'This is a dog He is a boy'.replace(/\bis\b/g,'IS'); "This IS a dog He IS a boy" 'This is a dog He is a boy'.replace(/\Bis/g,'IS'); "ThIS is a dog He is a boy"? 出现零次或者一次(最多出现一次) + 出现一次或者多次(至少一次) * 出现零次或者多次(任意次) {n} 出现n次 {n,m} 出现n到m次 {n,} 至少出现n次
()可以达到分组的功能 (shunzizhan){3}
'a1b2c3de5'.replace(/([a-z]\d){3}/g,'X') "Xde5"使用|达到或的效果
'shunzizhan'.replace(/shun|zizhan/g,'X') "XX" 'shunzhanshzizhan'.replace(/sh(un|zi)zhan/g,'X') "XX"不希望捕获某些分组,只需要在分组内加上?:
/(?:shunzi).(zhan)/g正则表达式从文本头部向尾部开始解析,文本尾部方向,称为“前” 前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/前瞻方向相反 JavaScript不支持后顾 符合和不符合特定断言称为肯定/正向匹配和否定/负向匹配
正向前瞻 exp(?=assert) 负向前瞻 exp(?!assert)
'a2*3'.replace(/\w(?=\d)/g,'X') "X2*3" 'a2*34v8'.replace(/\w(?=\d)/g,'X') "X2*X4X8" 'a2*34v8'.replace(/\w(?!\d)/g,'X') "aX*3XvX"test lastIndex 作怪
var reg = /\w/g; undefined reg.test('a') true reg.test('a') false reg.test('a') true reg.test('a') falseexec 使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果 如果没有匹配的文本则返回null,否则返回一个结果数组 - index 声明匹配文本的第一个字符的位置 - input 存放被检索的字符串string
用于检测字符串中指定的子字符串,或检测与正则表达式相匹配的子字符串 方法返回第一个匹配结果index,查找不到返回-1 不执行全局匹配,忽略标志g,并且总是从字符串的开始进行检索
'a1b2c3d4'.search(1) 1 'a1b2c3d4'.search('1') 1 'a1b2c3d4'.search(/1/) 1 'a1b2c3d4'.search(/1/g) 1将检索字符串,以找到一个或者多个与regexp匹配的文本 regexp是否具有标志g对结果影响很大
非全局 没有g,则只能在字符串中执行一次匹配 如果没有找到任何匹配的文本,将返回null 否则他将返回一个数组,其中存放与它找到的匹配有关的信息 返回数组的第一个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本 返回的数组,还包含2个对象属性 - index 声明匹配文本的起始字符在字符串中的位置 - input 声明对stringObject的引用
全局 具有g标志,执行全局检索,找到字符串中所有匹配子字符串 如果没有找到任何匹配的文本,将返回null 如果找到了一个或者多个匹配子串,则返回一个数组 数组中存放的是字符串中所有的匹配子串,而且没有index input属性
String.prototype.replace(str,replaceStr) String.prototype.replace(reg,replaceStr) String.prototype.replace(reg,function) **function**4个参数 1.匹配字符串 2.正则表达式分组内容,没有分组则没有该参数 3.匹配项在字符串中的index 4.原字符串
'a1b1c1'.replace('1','2') "a2b1c1" 'a1b1c1'.replace(/1/g,'2') "a2b2c2" 'a1b2c3d4' => 'a2b3c4d5' 'a1b2c3d4'.replace(/\d/g,function(childstr,index,str){ return parseInt(childstr)+1; }) 'a1b2c3d4e5'.replace(/(\d)(\w)(\d)/g,function(match,group1,group2,group3,index,origin){ console.log(match); return group1 + group3; }) VM651:3 1b2 VM651:3 3d4 "a12c34e5"