本文主要为笔者在学习JavaScript正则过程当中的一点学习笔记,主要讲述JavaScript的正则表达式及其相关,包含String的match、replace、search和split方法。javascript
var reg = /abc/;
var reg = new RegExp("abc");
字符 | 含义 |
---|---|
^ | 匹配字符串的开始。若是多行标示被设为true,同时匹配换行后紧跟的字符 |
$ | 匹配字符串的结尾。若是多行标示被设为true,同时匹配换行前紧跟的字符 |
* | 匹配前一个字符0次或者是屡次 |
+ | 匹配前一个字符1次或者屡次,等同于{1,} |
? | 匹配前一个字符0次或者1次,等同于{0,1} |
. | 匹配任何除了新一行开头字符的任何单个字符 /.n/将会匹配”an apple is on the tree”中的“an”和“on”,不匹配“nay” |
(x) | 匹配‘x’而且记住匹配项,即捕获分组.匹配到子字符串能够经过结果数组的[1],…,[n]进行访问 |
(?:x) | 匹配‘x’可是不记住匹配项,即非捕获分组.匹配到子字符串不能经过结果数组的[1],…,[n]进行访问,性能略高 |
x(?=y) | 匹配‘x’仅仅当‘x’后面跟着‘y’,可是不记住‘y’。正向确定查找,非捕获分组的一种 |
x(?!y) | 匹配‘x’仅仅当‘x’后面不跟着‘y’,不记住‘y’。正向否认查找,非捕获分组的一种 |
x|y | 匹配‘x’或‘y’ |
{n} | n是正整数,匹配前面一个字符恰好发生了n次 |
{n,m} | n,m都是正整数。匹配前面的字符至少n次,最多m次。若是n或者m的值是0,这个值被忽略 |
[xyz] | 匹配方括号中的任意字符。可使用破折号(-)来指定一个字符范围。 |
[^xyz] | 匹配任何没有包含在括号中的字符,可使用破折号指定一个字符范围 |
[\b] | 匹配一个退格(U+008) |
\b | 匹配一个单词的边界 |
\B | 匹配一个非单词边界 |
\d | 匹配一个数字 |
\D | 匹配一个非数字字符 |
\s | 匹配一个空白字符,包括空格、制表符、换页符和换行符 |
\S | 匹配一个非空白字符 |
\t | 匹配一个水平制表符 |
\v | 匹配一个垂直制表符 |
\w | 匹配一个单字字符 |
\W | 匹配一个非单子字符 |
\n | 匹配一个换行符 |
\f | 匹配一个换页符 |
\r | 匹配一个回车符 |
\num | num 是一个正整数,返回引用到捕获分组的副字符串。 eg/\w+(,)?\w+(!)?\w+\1\w+\2/ 匹配"beijing,the!capital,of!china" |
标志值 | |
g | 全局搜索(global) |
m | 多行搜索(multiline) |
i | 不区分大小写(ignoreCase) |
exec(string)
返回一个数组。eg:php
var myRe = new RegExp("d(b+)d", "g"), var myArray = myRe.exec("cdbbbdc");
属性或索引 | 描述 | 例子中对应的值 |
---|---|---|
myArray | 匹配到的字符串和全部被捕获的子字符串 | [“dbbbd”, ‘bbb’] |
[0] | 匹配的全部字符串 | ‘dbbdd’ |
index | 匹配到的字符串开始的索引值(以0开始) | 1 |
input | 输入的初始字符串 | “cdbbbdc” |
myRe | ||
lastIndex | 下一次匹配开始的索引值(只有g参数时才有用) | 5 |
source | 模式文本 | “d(\b+)d” |
test(string)
return true/false
查询字符串里是否有该正则的匹配css
match(RegExp)html
split(RegExp)
经过把字符串分割成子字符串来把一个string对象分割成一个字符串数组java
search(RegExp)
查看字符串对象与一个正则表达式是否匹配,返回正则表达式在字符串中首次匹配项的索引。不然,返回-1
ps:若是传入一个非正则表达式对象,则会使用new RegExp(obj)隐式地将其装换为正则表达式对象。node
replace(RegExp, replace|function)
使用replacement替换string中匹配的RegExp,返回替换后的字符串,不应表原字符串。
替换字符串能够插入下面的特殊变量名:nginx
变量名 | 表明的值 |
---|---|
$ | 插入一个”$” |
@@bodyamp; | 插入匹配的字符串 |
|
插入当前匹配的字符串左边的内容 |
$’ | 插入当前匹配的字符串右边的内容 |
$n or $nn | n或nn是十进制的数字,那么插入第n个括号匹配的字符串 |
指定一个函数做为参数
这种状况下,当匹配执行后,该函数就会执行,函数的返回值做为替换字符串(上面的特殊参数在这里不能使用)。若是正则表达式是全局匹配模式,则该function将被屡次调用,每次匹配都会被调用。
该函数的参数:git
变量名 | 表明的值 |
---|---|
match | 匹配的字符串(对应上面的@@bodyamp;) |
p1,p2,…,pn | 表明RegExp对象中第n个括号匹配的字符串(对应于上述的$1,$2…) |
offset | 匹配到的子字符串在原字符串中的偏移量。 |
string | 被匹配的原字符串 |
下面使用上面刚叙述过的正则表达式来练习下github
function test1(str) {
return str.replace(/\B(?=(?:\d{3})+$)/g, ',');
}
function test2(str) {
str.replace(/\d/g, function(val) {
return val * 2;
});
}