- 有关正则:
- \d表示匹配数字
- ()表示分组,分组一般和$1 $2...一起使用表示匹配的第一个分组第二个分组JavaScript正则表达式之分组匹配 / 反向引用
- []表示范围,eg:[0-9] [a-z] [A-Z],组合类则为[0-9a-z]
- 量词:{m}m次,{m,n}大于等于m小于等于n,{m,}表示大于等于m次,?={0,1},+={1,}
notice:
没有{1+}这种操作,只有+ 或者{1,}这种表示大于等于1个,而且通常+不会单独写{}
*:匹配前一个表达式 0 次或多次。等价于
{0,}
。. :(小数点)默认匹配除换行符之外的任何单个字符。
例如,
/.n/
将会匹配 "nay, an apple is on the tree" 中的 'an' 和 'on',但是不会匹配 'nay'。//邮箱匹配(这种简写版其实会有一些纰漏)[-\w]==[a-zA-Z0-9_-] /\w[-\w]*@(\w+\.)+[A-Za-z]+/.test(str); //正规 /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test(str)
\w 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束 - ^开头$结尾,而对于^有两点需要介绍
^ 的意思是从左向右匹配,从字符串的开头开始匹配; 如果^在 [ ]中出现,那么就是非的意思了,不再是从开头匹配的意思 - g global全局匹配 i ignorCase忽略大小写 m mutiple允许多行匹配
- replace第二个参数使用$必须加引号
- 有关?=的含义:
(?=)和(?!);零宽正向断言和负向断言,括号内表示某个位置右边必须和=右边匹配上,或者不和!后的字符匹配。
exp1(?=exp2) 查找exp2前面的exp1
exp1(?!exp2) 查找后面不是exp2的exp1
var pattern=/str(?=ings)ing/;
console.log("strings.a".match(pattern));
console.log("strings.a".match(/string(?=s)/));
console.log("string_x".match(pattern));
console.log("string_x".match(/string(?=s)/));
注:
- 这里一定要用到分组()还有全局匹配g,类似一个遍历的过程。
- 如果有负号的话,建议像处理dot一样处理一下即可。
其他:
?的其他用法:非贪婪匹配:
- 默认我们不用?为贪婪模式,如对 "123abc" 使用
/\d+/
将会匹配 "123" - ?紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪(匹配尽量少的字符),如使用
/\d+?/
则只会匹配到 "1"
8. 关于\1\2的理解:
正则\1\2和\\1的理解:
‘\1’ 匹配的是 字符 ‘\1’ 。 (因为 ‘\’ 匹配字符 ‘\’ )
‘\2’ 匹配的是 字符 ‘\2’
‘\1’ 匹配的是 所获取的第1个()匹配的引用。例如,’(\d)\1’ 匹配两个连续数字字符。如33aa 中的33
‘\2’ 匹配的是 所获取的第2个()匹配的引用。
例如,’(\d)(a)\1’ 匹配第一是数字第二是字符a,第三\1必须匹配第一个一样的数字重复一次,也就是被引用一次。如9a9 被匹配,但9a8不会被匹配,因为第三位的\1必须是9才可以,
‘(\d)(a)\2’ 匹配第一个是一个数字,第二个是a,第三个\2必须是第二组()中匹配一样的,如,8aa被匹配,但8ab,7a7不会被匹配,第三位必须是第二组字符的复制版,也是就引用第二组正则的匹配内容。
注:参考MDN:注意 \1
、\2
、...、\n
是用在正则表达式的匹配环节,而在正则表达式的替换环节,则要使用像 $1
、$2
、...、$n
这样的语法,
9. 正则表达式标志
标志 | 描述 |
---|---|
g | 全局搜索。 |
i | 不区分大小写搜索。 |
m | 多行搜索。 |
s | 允许 . 匹配换行符。 |
u | 使用unicode码的模式进行匹配。 |
y | 执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志。 |
正则表达式的另外应用:字符串前面后面去空格:
const TRIM_REGX = /(^\s+)|(\s+$)/g;//因为是去首尾空格所以一定需要^和$,注意是多个空格所以一定要用+,表示出现1次及一次以上≥1,也就是{1,} |表示或操作符
var myres0=' ScriptOJ '.replace(TRIM_REGX, '') // => ScriptOJ
console.log(myres0.length);
运行结果:
有关于JavaScript字符串方法使用正则表达式请移步我的另一篇文章: