JavaScript正则表达式需要转义的字符 您所在的位置:网站首页 斜的中括号 JavaScript正则表达式需要转义的字符

JavaScript正则表达式需要转义的字符

2023-11-11 23:01| 来源: 网络整理| 查看: 265

转义的各种情况 ⭐ 可无脑转义元字符: ^ $ . * + ? | \ / ( ) [ ] { } - ,⭐ ^ $ . * + ? | \ / ( ) [ 等字符,不在字符组内,都需要转义⭐ 不在字符组内,不用转译右中括号;在字符组内,需要转译右中括号⭐ js字符串中的反斜杠也需要转义✅字符组内需要转义的字符: ^ - [ ] \✅要匹配字符串"[abc]",只需要转义左方中括号——[✅要匹配字符串"{abc}",只需要转义左大括号——{ 其余情况:✅括号,即(),需要前后括号都转义✅正向先行断言和负向先行断言,即`(?=p)`和`(?!p)`中,需要转义`?`,`=`和`!`不用转译✅非捕获分组,即`(?:p)`中,需要转义`?`,`:`不用转译✅正向回溯和负向回溯,即`(? 所谓元字符,就是正则中有特殊含义的字符。 所有结构里,用到的元字符总结如下:

⭐ 可无脑转义元字符: ^ $ . * + ? | \ / ( ) [ ] { } - ,

当匹配上面的字符本身时,可以无脑一律转义,总之不会出错:

var string = "^$.*+?|\\/()[]{}=!:-,"; var regex = /\^\$\.\*\+\?\|\\\/\(\)\[\]\{\}\=\!\:\-\,/; console.log( regex.test(string) ); // => true

但这些字符不是什么时候都需要转义,可以看情况不转义。

⭐ ^ $ . * + ? | \ / ( ) [ 等字符,不在字符组内,都需要转义 ⭐ 不在字符组内,不用转译右中括号;在字符组内,需要转译右中括号 // ^ $ . * + ? | \ / ( ) [ 等字符,不在字符组内,都需要转义 var string = "^$.*+?|\\/()[]"; // 不在字符组内,右侧的中括号可以不转义 var regex = /\^\$\.\*\+\?\|\\\/\(\)\[]/g; console.log( string.match(regex) ); // => ['^$.*+?|\/()[]'] ⭐ js字符串中的反斜杠也需要转义 var string = "\\"; // js中的反斜杠也需要转义 var regex = /\\/g; console.log( string.match(regex) ); // => ["\"] var string = "\"; // 不转译会报错 var regex = /\\/g; console.log( string.match(regex) ); // Uncaught SyntaxError: Invalid or unexpected token ✅字符组内需要转义的字符: ^ - [ ] \

跟字符组相关的元字符有[]、^、-。

因此在会引起歧义的地方进行转义。

例如开头的^必须转义,不然会把整个字符组,看成反义字符组。

var string = "^$.*+?|\\/[]{}=!:-,"; var regex = /[\^$.*+?|\\/\[\]{}=!:\-,]/g; // 右侧的中括号必须要转义 console.log( string.match(regex) ); // => ["^", "$", ".", "*", "+", "?", "|", "\", "/", "[", "]", "{", "}", "=", "!", ":", "-", ","] ✅要匹配字符串"[abc]",只需要转义左方中括号——[

我们知道[abc],是个字符组。如果要匹配字符串"[abc]"时,该怎么办?

可以写成/\[abc\]\

也可以写成/\[abc]/,测试如下:

var string = "[abc]"; var regex = /\[abc]/g; console.log( string.match(regex)[0] ); // => "[abc]"

因为后面的方括号不构成字符组,正则不会引发歧义,自然不需要转义。 同理,要匹配字符串"{3,5}",只需要把正则写成/\{3,5}/即可。

✅要匹配字符串"{abc}",只需要转义左大括号——{

另外,我们知道量词有简写形式{m,},却没有{,n}的情况。虽然后者不构成量词的形式,但此时并不会报错。 匹配字符串直接写作 /{,n}/g,此时不需要转义大括号

var string = "{,n}"; varregex = /{,n}/g; console.log( string.match(regex) ); //=> ["{,n}"] 其余情况: ✅括号,即(),需要前后括号都转义 ✅正向先行断言和负向先行断言,即(?=p)和(?!p)中,需要转义?,=和!不用转译 var result = "he??lo".replace(/(?=\?)/g, '#'); console.log(result); // => he#?#?lo var result = "he==o".replace(/(?==)/g, '#'); console.log(result); // => he#=#=o var result = "he!!o".replace(/(?!!)/g, '#'); console.log(result); // => #h#e!!#o# ✅非捕获分组,即(?:p)中,需要转义?,:不用转译 var result = "he::o".replace(/(?::)/g, '#'); console.log(result); // => he##o ✅正向回溯和负向回溯,即(??,/g, '#'); console.log(result); // => #h#e#


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有