正则是现在,很多语言中都会用的一种匹配方式。
看了还是不太明白的话可以点下面 的连接去对应的手册查看。我这里只介绍一些常用的知识。
以在js中使用为例
'/正则表达式/' - - - 模糊查询 '/^正则表达式$/' - - - - 精准匹配
\- 固定的一个特殊符号可以用转义符('\')来匹配
\d 可以匹配一个数字
\D 匹配非数字
\w 可以匹配一个字母或数字和下划线
\W可以匹配一个非字母或非数字和非下划线
\b 匹配一个词的边界。具体就是\w和\W之间的位置,也包括\w和^之间的位置,也包括\w和$之间的位置。
\B 匹配一个非单词边界, \b的反面的意思。说来就是\w与\w、\W与\W、^与\W,\W与$之间的位置。
\s(小写)只要出现空白(空格)就匹配
\S(大写)非空白(空格)就匹配
. 可以匹配任意字符,对于码点大于0xFFFF的 Unicode 字符,点字符不能识别如:''。必须加上/s修饰符才能识别。还有中终止符如:\n
* 表示任意个字符(包括0个)
+ 表示至少一个字符
? 表示0个或1个字符
x|y 表达式匹配x或者y
{n,m} 表示n-m个字符:
[] 单个字符不限顺序的出现 如:[ace] 匹配ace/cae/eac/等,只要出现这3个字符[ace]中的一种就匹配成功。
[^a] 匹配除去a以外的所有数据。[^]代表不匹配的意思。如:var str='aaaba'; str.match(/[^a]/g) // [b]
{} 匹配多少次,a{5}匹配5个连续的a,a{5,10}匹配5到10之间个连续的a,a{5,}匹配5到,5以后的任意个之间连续的a
() 优先级括住之后就会产生一个子匹配项 在下面的replace()函数中有用到
^ 表示行的开头
^\d 表示必须以数字开头。
$ 表示行的结束,
\d$ 表示必须以数字结束。如:^js$只能匹配到 js了。
? 匹配零次或一次 ,相当于{0,1}
?=n 匹配n之前的位置。 其后紧接指定字符串 n 的字符串。如:var str="Is thisall there is"; var patt1=/is(?=all)/g; //is (匹配的是isall中的is)
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。如:var patt1=/is(?!all)/g; //is (匹配的是is后没有紧接all)
(?<=y)x 匹配'x'仅仅当'x'前面是'y'.这种叫做后行断言。
(?:x) 匹配 'x' 但是不记住匹配项。这种叫作非捕获括号
修饰符
/u 用来正确处理大于\uFFFF的 Unicode 字符。会正确处理四个字节的 UTF-16 编码。/\u{61}/u.test('a') // true 不加/u会把{61}当成匹配61个u.
/i 不区分字符大小写
/g 全局匹配,不会再第一次匹配成功后就停止。
/y 也是全局匹配,不过需要“粘连”。g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。
/s 让.(点)匹配任意单个字符
方法
search()方法返回匹配到的元素下标,不执行全局匹配,它将忽略标志/g,
如:str.search(/hello/g)
match() 方法的参数可以是字符串或正则表达式。匹配得到的结果存放到一个数组中。
如:var str="Hello world!" str.match(/o/g)//['o','o'] str.match(/o/)["o", index: 4, input: "Hello world!", groups: undefined]
在匹配结果中如果只匹配到一个得到相关的详细信息如上,如果匹配到过个只会吧匹配的元素放入数组中。
replace(a,b)方法字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。返回一个新字符串,原字符不变。
如:name = "Doe, John";name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");可以有多个正则表达式,$1和$2表示第一个和第二个表达式所匹配到的数据
test() 方法用于检测字符串是否与对应的正则表达式相匹配
如:var str = "longen and yunxi";console.log(/longen/.test(str)); // true console.log(/longlong/.test(str)); //false
exec() 方法返回匹配到的元素详细信息与match()只匹配一个得到的一样,不执行全局匹配,它将忽略标志/g,可以进行循环匹配得到全部匹配的详细信息。
如:/wo/.exec(str)