正则的教程很多,小编本着让大家浅显易懂的学习,以最简单的方式详情正则表达式,不喜勿喷。
元字符(断言)
.
匹配除换行符以外的任意字符
\w
匹配字母或者数字或者下划线或者汉字
\s
匹配一个空白字符,包括空格、制表符、换页符和换行符。
\d
匹配数字
\b
匹配单词的开始或者结束
^
匹配字符串的开始
$
匹配字符串的结束
\n
匹配一个换行符
\r
匹配一个回车符
\0nn
ASCII 代码中八进制代码为nn的字符
\\xnn
ASCII 代码中十六进制代码为nn的字符
\\unnnn
Unicode 代码中十六进制代码为 nnnn 的字符 [\\u4e00-\\u9fa5]
假如我们要查找元字符本身需要加上 \
转义,如:\*
\\w
重复
*
重复零次或者更屡次
+
重复一次或者更屡次
?
重复零次或者一次
{n}
重复 n 次
{n,}
重复 n 次或者更屡次
{n,m}
重复 n 到 m 次
字符类
[a-zA-Z]
[\w]
[0-9]
分枝条件
|
或者 注意:abc|eba
分组
(\d{1,3}){3}
反义
\W
匹配任意不是字母,数字,下划线,汉字的字符
\S
匹配任意不是空白符的字符
\D
匹配任意非数字的字符
\B
匹配不是单词开头或者结束的位置
[^x]
匹配除了 x 以外的任意字符
[^aeiou]
匹配除了 aeiou 这几个字母以外的任意字符
操练
0\d{2}-\d{8}
(?0\d{2})?[- ]?\d{8}|0\d{2}[- ]?\d{8}
((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
/(?\d{3})?([-\/.])\d{3}\1\d{4}/
反向引使用
\n
命名分组
(?P...)
例子:
]+)>[\s\S]*?
非捕获分组
(?:...)
例子:
(?:\d{4})-(\d{2})-(\d{2})
环视(零宽断言)
(?=...)
一定顺序环视(向右)
(?!...)
否定顺序环视(向右)
(?<=..)
一定逆序环视 (向左) Javascript 不支持
(?<!..)
否定逆序环视 (向左) Javascript 不支持
例子:
(<(?!/))
与 (<[^/])
区别
1(?=\d{3})
贪婪与懒惰
*?
尽可可以少的匹配
(...)+?
其它
匹配模式
i
不区分大小写
g
全局查找, 不是找到第一个就中止
m
多行模式
优化级
()
*?+
abc
a|bc
Javascript 中的正则 API
正则对象
new RegExp(pattern [, flags])
好处是能用字符串拼接
new RegExp("abc|" + foo)
/\d+/igm
字面量
注意:RegExp 这个对象保存了少量匹配对象的状态信息
source
表达式的文本形式
global
能否指定的全局模式
ignoreCase
能否标示不区分大小写模式
multiline
能否指定了多行模式
lastIndex
假如用全局模式,变量保存的是在字符串中尝试下次匹配的偏移值
exec
方法使用于检索字符串中的正则表达式的匹配。
返回一个数组,其中存放匹配的结果。假如未找到匹配,则返回值为 null。
var pattern = /\d{4}-\d{2}-\d{2}/;
var str = '2010-12-20 2011-02-14';
if((matchArray = pattern.exec(str)) != null){
console.log(matchArray)
// [“2010-12-20”, index: 0, input: “2010-12-20 2011-02-14”]
}
var pattern = /\d{4}-\d{2}-\d{2}/g;
var str = '2010-12-20 2011-02-14';
while((matchArray = pattern.exec(str)) != null){
console.log(matchArray[0], matchArray.index, matchArray.lastIndex)
// “2010-12-20” 0 10
// “2011-02-14” 11 21
}
test
在测试正则表达式可以否匹配文本,反正布尔值
小心那个 lastIndex
var pattern = /^\d{4}-\d{2}-\d{2}$/g;
pattern.test(“2010-12-20”); // true
pattern.test(“2010-12-20”); // false
string.match(RegExp);
相似与 RegExp.exec(string)
, 唯一区别是无论能否指定全局模式, Regexp.exec()
总是返回单次的匹配结果,而 string.match()
在这种情况下会返回一个字符串数组,包含各次成功匹配结果。
string.search(RegExp)
返回正则表达式在字符串中第一次匹配的位置,不成功返回 -1
string.replace(RegExp, replacement)
默认情况下它只替换一次,要设置全局模式
replacement //字符中有少量特殊变量
$num //表示对应捕获分组匹配的文本
$$ //$字符
$` //匹配文本之前(左侧)的文本
$' //匹配文本之后(右侧)的文本
string.replace(RegExp, function)
function
接收一个字符串,也返回一个字符串
“one two three”.replace(/\bt[a-zA-Z]+\b/g, function(m){
return m.toUpperCase()
})
// one TWO THREE
string.split(RegExp)
用正则来切分字符串,全局模式不影响它
var matchArray = “one two three”.split(/\s+/)
关注 web翎云阁,定时推送,互动精彩多,若你有更好的见地,欢迎留言讨论!