本文将对 JavaScript 中的正则表达式语法及其使用做简单总结。
语法
var patt=new RegExp(pattern,modifiers);
var patt=/pattern/modifiers;
pattern: 模式,modifiers: 修饰符
修饰符
i
(ignorCase),忽略大小写,执行对大小写不敏感的匹配。g
(globle),执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。m
(mutiple),执行多行匹配。
模式
方括号:用于查找某个范围内的字符:
1
2
3
4
5
6[abc] //查找方括号之间的任何字符
[^abc] //查找任何不在方括号之间的字符
[0-9] //查找任何从 0 至 9 的数字
[a-z] //查找任何从小写 a 到小写 z 的字符
[A-Z] //查找任何从大写 A 到大写 Z 的字符
[A-z] //查找任何从大写 A 到小写 z 的字符元字符:元字符(Metacharacter)是拥有特殊含义的字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48. //查找单个字符,除了换行和行结束符
//代码示例
var str="That's hot!";
var patt=/h.t/g;
str.match(patt) //结果为["hat", "hot"]
\w //查找单词字符
//单词字符包括:a-z、A-Z、0-9,以及下划线, 包含 _ (下划线) 字符
\W //查找非单词字符
\d //查找数字
\D //查找非数字字符
\s //查找空白字符
\S //查找非空白字符
\b //匹配单词边界
//代码示例
var str="Visit W3CSchool";
var patt=/\bW3/g; //匹配"W3"开头的字符
str.match(patt) //结果为["W3"]
\B //匹配非单词边界
//代码示例
var str="Visit schoolW3C";
var patt=/school\B/g; //匹配不以"school"结尾的字符
str.match(patt) //结果为["school"]
\0 //查找NULL字符
\n //查找换行符
\f //查找换页符
\r //查找回车符
\t //查找制表符
\v //查找垂直制表符
\xxx //查找以八进制数 xxx 规定的字符
\xdd //查找以八进制数 dd 规定的字符
\uxxxx //查找以十六进制数 xxxx 规定的 Unicode 字符限定符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36n+ //匹配任何包含至少一个 n 的字符串
//例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"
n* //匹配任何包含零个或多个 n 的字符串
//例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 //"b",但是不匹配 "A goat grunted"
n? //匹配任何包含零个或一个 n 的字符串
//例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"
n{X} //匹配包含 X 个 n 的序列的字符串。
//例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且//匹配 "caaandy." 中的前两个 "a"
n{X,} //X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。
//例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 //"caaaaaaandy." 中所有的 "a"
n{X,Y} //X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
//例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 //"a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即//使原始字符串拥有更多的 "a",匹配项也是 "aaa"
n$ //匹配任何结尾为 n 的字符串
^n //匹配任何开头为 n 的字符串
() //标记子表达式的开始和结尾,可以保存子表达式以备将来之用
//例如,A(\d) 与"A0"至"A9"匹配,保存该数字以备将来之用
| //指示在两个或多个项之间进行选择
//例如,z|food 与"z"或"food"匹配。 (z|f)ood 与"zood"或"food"匹配。
?=n //匹配任何其后紧接指定字符串 n 的字符串
//代码示例
var str="Is this all there is";
var patt=/is(?= all)/g; //匹配其后紧跟" all"的"is"
str.match(patt) //结果为["is"]
?!n //匹配任何其后没有紧接指定字符串 n 的字符串优先级顺序
运算符 | 功能 | |
---|---|---|
\ | 转义符 | |
(), (?:), (?=), [] | 括号和中括号 | |
*、+、?、{n}、{n,}、{n,m} | 限定符 | |
^、$、\任何元字符 | 定位点和序列 | |
\ | 替换 |
- RegExp 对象方法
compile
,RegExpObject.compile(regexp,modifier)
:编译正则表达式exec
,RegExpObject.exec(string)
:检索字符串中指定的值。返回找到的值,并确定其位置test
,RegExpObject.test(string)
:检索字符串中指定的值。返回 true 或 false
- 支持正则表达式的 String 对象的方法
search
,检索与正则表达式相匹配的值match
,找到一个或多个正则表达式的匹配replace
,替换与正则表达式匹配的子串split
,把字符串分割为字符串数组
实例应用
- js 不规范字符串转json对象
1
2
3
4
5
6
7
8
9
10
11// 预处理字符串:
str = '{ id: 8, valueType: 4, value: "中国银行武汉狮子山支行", remark: "houseOrderCompany"}'
// 正则
str = str.replace(/(\w+)\s*:/g, function(match, $1) { return '"' + $1 + '":' })
// 注意,这里使用(\w+),记住匹配项,用于后续的函数处理$1
// match 为匹配的子字符串,对应$&
// 结果
console.log(str)
// { "id": 8, "valueType": 4, "value": "中国银行武汉狮子山支行", "remark": "houseOrderCompany"}