本文将对 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
 36- n+ //匹配任何包含至少一个 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"}