正则表达式
正则表达式是用来匹配字符串中的字符组合的模式。
创建正则表达式有以下两种方式:
使用正则表达式字面量,如:
Var re = /ab/;
调用RegExp对象的构造函数,如:
var re = new RegExp("ab+c");
RegExp第二个参数flags为可选参数,flags的值可为i,g,m中的其中一个或者多个的组合。g(global)是全局标志。如果设置了这个标志,对某个文本执行搜索和替换操作时,将对文本中所有匹配的部分起作用。如果不设置这个标志,则仅搜索和替换最早匹配的内容。i(ignoreCase)是忽略大小写标志。如果设置了这个标志,进行匹配比较时,将忽略大小写。m(multiLine)是多行标志。如果不设置这个标志,那么元字符“^”只与整个被搜索字符串的开始位置相匹配,而元字符“$”只与被搜索字符串的结束位置相匹配。如果设置了这个标志,“^”还可以与被搜索字符串中的“\n”或“\r”之后的位置(即下一行的行首)相匹配,而“$”还可以与被搜索字符串中的“\n”或“\r”之后的位置(即下一行的行尾)相匹配。1、简单模式
简单的模式是有你找到的直接匹配所构成的。比如,/abc/这个模式就匹配了在一个字符串中,仅仅字符'abc'同时出现并按照这个顺序
2、使用特殊字符
字符 | 含义 |
\在字符串里面是一个转义字符。用于将一些特殊字符进行转义。 | |
匹配输入的开始。如果多行标示被设置为true,同时匹配换行后紧跟的字符。 比如,/^A/并不会匹配/^A/中的‘A’,但是会匹配“An E”中的‘A’。 当这个字符出现在一个字符集合模式的第一个字符的时候,它将会有不同的意义。 比如,/[^a-z\s]/会匹配“my 3 sisters”中的‘3’,即当^出现在字符集合模式时,代表以该字符集合中的字符为 开头(字符集的里面的字符可以出现0次或多次),返回的时开头字符之后的第一个字符。如果/[^a-z\s]+/则返回 开头后的字符一直到再出现[a-z\s]字符集中的字符为止(或者字符串结束为止)。 | |
匹配输入的结束,如果多行标示被设置为true,同时会匹配换行前紧跟的字符。 比如,/t$/并不会匹配“eater”中的‘t’,但是会匹配“eat”中的。 | |
匹配前一个字符0次或者是多次。 比如,/bo*/会匹配“A ghost boooooed”中的'boooo'和‘A bird warbled’中的‘b’, 但是在“A goat grunted”中将不会匹配任何东西。 | |
匹配前面一个字符1次或者多次,和{1,}有相同的效果。 如,/a+/匹配了在“candy”中的a,和在"caaaaaaandy"中所有的a。 | |
匹配前面一个字符0次或者1次,和{0,1}有相同的效果。 比如,/e?le?/匹配“angel”中的‘el’,和"angle"中的‘le’以及“oslo”中的'l'。 如果'?'紧跟在在任何量词*, + , ?,或者是{}的后面,将会使量词变成非贪婪模式(匹配最少的次数), 和默认的贪婪模式(匹配最多的次数)正好相反。 比如,使用/\d+/非全局的匹配“123abc”将会返回“123”,如果使用/\d+?/,那么久只会匹配到“1”。 同时运用在向前断言,在本表的x(?=y)和x(?!y)中有描述。 | |
(The decimal point) matches any single character except the newline character. (小数点)匹配任何除了新一行字符的任何单个字符。 比如,/.n/将会匹配‘nay, an apple is on the tree’中的‘an’和‘on’,但是不会匹配'nay'。 | |
匹配‘x’并且记住匹配项。这个被叫做捕获括号。 比如,/(foo)/匹配和记住了“foo bar”中的'foo'。匹配到子字符串可以通过结果数组的[1],...,[n]元素进行访问。 | |
匹配'x'但是不记住匹配项。这种被叫做非捕获括号。匹配到的子字符串不能通过结果数组的[1],...,[n]进行访问。 | |
匹配'x'仅仅当'x'后面跟着'y'.这种叫做向后查询。 比如,/Jack(?=Sprat)/会匹配到'Jack'仅仅当它后面跟着'Sprat'。 /Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着'Sprat'或者是‘Frost’。 但是‘Sprat’和‘Frost’都不是匹配结果的一部分。 | |
匹配'x'仅仅当'x'后面不跟着'y',这个被叫反向向前查找。 比如,/\d+(?!\.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。 正则表达式/\d+(?!\.)/.exec("3.141")匹配‘141’但是不是‘3.141’ | |
匹配‘x’或者‘y’。 比如,/green|red/匹配“green apple”中的‘greem’和“red apple”中的‘red’ | |
n是一个正数,匹配了前面一个字符刚好发生了n次。 比如,/a{2}/不会匹配“candy”中的'a',但是会匹配“caandy”中所有的a,和“caaandy”中的前两个'a'。 | |
匹配前面一个字符n到m次 | |
字符集,即匹配其中任意一个字符即可 | |
匹配不包含在该字符集中的其他字符 | |
匹配单词的开始或结束. 比如:/\babc/匹配abcd中的abc,但是不匹配aabc中的abc | |
匹配不是单词开头或结束的位置. 比如:\/Bbc/B\匹配abcd中的bc,但比匹配abc或者bcd中的bc | |
匹配数字字符 | |
匹配非数字字符 | |
换页符 (U+000C). | |
换行符 (U+000A). | |
回车符 (U+000D). | |
匹配空格 | |
匹配非空格 | |
制表符 (U+0009). | |
垂直制表符(U+000B). | |
匹配数字、字母、下划线 | |
匹配非数字、字母、下划线 | |
当n为数字时,表示对第n个匹配结果的引用,如: /apple(,)\sorange\1/ 匹配"apple, orange, cherry, peach."中的 'apple, orange,',此处\1表示第 一个匹配结果,即逗号 | |
匹配null |
使用正则表达式
正则表达式可以通过RegExp的方法:test和exec和String的方法:match、search、replace、split方法使用。具体如下:
方法 | 描述 |
exec | RegExp的方法,用于搜索匹配的字符,返回匹配字符数组。 |
test | RegExp的方法,用于测试正则表达式是否匹配string中的字符,如果有匹配则返回true,否则返回false。 |
match | String的方法,执行搜索匹配的字符,当有匹配时,返回匹配字符的数组,否则返回null。 |
search | String的方法,返回匹配字符在string中的索引,如无匹配返回-1。如:"saaaaa".search(/a/g)返回1,返回匹配的第一个字符的为止 |
replace | String的方法,将字符串中匹配的字符替换成要替换的字符 |
split | String的方法,以字符串以字符或者正则表达式匹配的字符为分割符,将字符串分割为数组 |
使用括号匹配的字符
1、 正则表达式中使用
/a(b+)c\1/.exec(“abbcbbsdf”),\1表示第一个括号即(b+)的匹配字符,此处为bb
2、 replace中使用
使用美元符号$加数字,如$1表示第一个括号匹配的字符。如:
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2,$1");
console.log(newstr);
//此处$1表示第一个括号匹配的结果即john,$2表示第二个括号里的匹配结果即Smith.