RegExp表达式的方法
exec
1 | function render(template, data) { |
test
- 回文字符串
1
2
3
4
5
6
7
8
9var isPalindrome = function(s) {
if(typeof s != 'string') return s = s.toString()
if(s.length < 2) return true
var r = /[^a-zA-Z0-9]/ig;
s = s.replace(r, '').toLowerCase()
return s == s.split('').reverse().join('')
};
// test
isPalindrome('cppc') // true
驼峰转换
1 | // content-type => contentType |
描述字符
元字符
元字符 描述
. 查找单个字符,除了换行和行结束符
\w 查找单词字符
\W 查找非单词字符
\d 查找数字
\D 查找非数字字符
\s 查找空白字符
\S 查找非空白字符
\b 匹配单词边界
\B 匹配非单词边界
描述字符范围
在正则表达式语法中,放括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符~表示。如果在方括号内添加脱字符^前缀,还可以表示范围之外的字符。例如:
[abc]:查找方括号内任意一个字符。
[^abc]:查找不在方括号内的字符。
[0-9]:查找从 0 至 9 范围内的数字,即查找数字。
[a-z]:查找从小写 a 到小写 z 范围内的字符,即查找小写字母。
[A-Z]:查找从大写 A 到大写 Z 范围内的字符,即查找大写字母。
[A-z]:查找从大写 A 到小写 z 范围内的字符,即所有大小写的字母。
选择匹配
选择匹配类似于 JavaScript 的逻辑与运算,使用竖线|描述,表示在两个子模式的匹配结果中任选一个。例如:
1) 匹配任意数字或字母var r = /\w+|\d+/;
2) 可以定义多重选择模式。设计方法:在多个子模式之间加入选择操作符。var r = /(abc)|(efg)|(123)|(456)/;
重复匹配
在正则表达式语法中,定义了一组重复类量词,如表所示。它们定义了重复匹配字符的确数或约数。
重复类量词列表
量词 描述
n+ 匹配任何包含至少一个 n 的字符串
n* 匹配任何包含零个或多个 n 的字符串
n? 匹配任何包含零个或一个 n 的字符串
n{x} 匹配包含 x 个 n 的序列的字符串
n{x,y} 匹配包含最少 x 个、最多 y 个 n 的序列的字符串
n{x,} 匹配包含至少 x 个 n 的序列的字符串
示例
var s = "ggle gogle google gooogle goooogle gooooogle goooooogle gooooooogle goooooooogle";
1.如果仅匹配单词 ggle 和 gogle,可以设计:
1 | var r = /go?gle/g; |
量词?表示前面字符或子表达式为可有可无,等效于
1 | var r = /go{0,1}gle/g; |
2.如果匹配第 4 个单词 gooogle,可以设计:
1 | var r = /go{3}gle/g; |
等效于:
1 | var r = /gooogle/g; |
3.如果匹配第 4 个到第 6 个之间的单词,可以设计:
1 | var r = /go{3,5}gle/g; |
4.如果匹配所有单词,可以设计:
1 | var r = /go*gle/g; |
量词*表示前面字符或表达式可以不出现,或者重复出现任意多次。等效于:
1 | var r = /go(0,)gle/g; |
5.如果匹配包含字符“o”的所有词,可以设计:
1 | var r = /go+gle/g; |
相当于
1 | var r = /go{1,}gle/g; |
惰性匹配
重复类量词都具有贪婪性,在条件允许的前提下,会匹配尽可能多的字符。
?、{n} 和 {n,m} 重复类具有弱贪婪性,表现为贪婪的有限性。
*、+ 和 {n,} 重复类具有强贪婪性,表现为贪婪的无限性。
边界量词
边界就是确定匹配模式的位置,如字符串的头部或尾部,具体说明如表所示。
JavaScript 正则表达式支持的边界量词
量词 说明
^ 匹配开头,在多行检测中,会匹配一行的开头
$ 匹配结尾,在多行检测中,会匹配一行的结尾
示例
var s = "how are you"
匹配最后一个单词
1 | var r = /\w+$/; |
匹配第一个单词
1 | var r = /^\w+/; |