js中的正则表达式使用RegExp对象表示,两种建立正则表达式对象的方法javascript
将表达式包含在斜杠之间java
var pattern = /js/;
使用RegExp()构造函数定义正则表达式
var pattern = new RegExp('js');
特殊字符须要转译:使用反斜杠\进行转移函数
下为几种常见的字符类code
尽量少的匹配,在待匹配的字符后面加?对象
var p1 = /[a]+/; var p2 = /[a]+?/; var str = 'aaaaaaasss'; str.match(p1); /*["aaaaaaa", index: 0, input: "aaaaaaasss"]*/ str.match(p2); /*["a", index: 0, input: "aaaaaaasss"] 尽量少的匹配*/
圆括号的做用ip
var p = /java(script)?/ //表示能够有script也能够没有,script为一个子表达式
var p1 = /[a-z]+\d+/; var p2 = /[a-z]+(\d+)/; var str = 'abc123456aaa'; str.match(p1); //["abc123456", index: 0, input: "abc123456aaa"] 能够匹配出字符串abc123456 str.match(p2); /* ["abc123456", "123456", index: 0, input: "abc123456aaa"] 能够把子模式(\d+)单独匹配出来*/
var p1 = /['"][^'"]*['"]/; //匹配引号之中的文本,不能保证左右匹配 var p2 = /(['"])[^'"]*\1/; //用\n表示第n个圆括号中的子表达式,计数以右边括号的位置为准,\1表示模式匹配的文本的引用,而不是对子表达式的引用,能够保证引号匹配。 var a = '\'aaaa\'123'; var b = '\'aaaa\"123'; a.match(p1); ["'aaaa'", index: 0, input: "'aaaa'123"]//正常匹配 a.match(p2); ["'aaaa'", "\'", index: 0, input: "'aaaa'123"] //能够匹配出子表达式['"]中对应的字符 ' (\为本身加的转译符) b.match(p1); ["'aaaa"", index: 0, input: "'aaaa"123"]//["'aaaa"", index: 0, input: "'aaaa"123"] 正常匹配 b.match(p2);//null ,由于\1表示第一个组匹配到的文本的引用,既 ' 而不是 "
***不能在字符类中使用这种引用,例如字符串
/['"][^\1]*\1/
这种写法是非法的 ***若是只想分组,但不想分组被编号,能够使用(?: )来进行分组,例如:input
var p = /([Jj]ava(?:script)?)\sis\s(fun\w*)/ //(?: )中的字符能够被做为分组匹配,但不会进行编号,则\2表示与(fun\w*)匹配的文本
var p = /[Jj]ava(script)?(?=\:)/; var str1 = 'Javascript:aaa'; var str2 = 'Javascript aaa'; str1.match(p); //["Javascript", "script", index: 0, input: "Javascript:aaa"],匹配成功,可是匹配结果中不包含: str2.match(p); //null,不能匹配,由于先行断言不知足
var p = /[Jj]ava(?!script)[A-Z]\w*/; //表示java后面能够跟大写字母和任意多的ASCII单词,可是不能包含script var str1 = 'javaBean'; var str2 = 'javascript'; var str3 = 'javascripter'; str1.match(p);/*["javaBean", index: 0, input: "javaBean"] 匹配成功*/ str2.match(p); //null str3.match(p); //null
var p = /"([^"]*)"/g; text = '1,"2,3","5",4'; text.replace(p, 'A$1A');//1,A2,3A,A5A,4,匹配出全部p相匹配的部分,$1表明([^"]*)中匹配的结果,并将全部"替换为A