regex 为什么我必须在JavaScript正则表达式中添加双反斜杠?

iaqfqrcu  于 2023-08-08  发布在  Java
关注(0)|答案(3)|浏览(123)

当我使用像www.example.com这样的工具时regexpal.com,它让我像以前一样使用正则表达式。例如,我想检查一个文本,如果有一个至少3个字母长且以白色结尾的单词匹配,那么它将匹配'now ''noww '等等。
在regexpal.com上,此正则表达式适用于\w{3,}\s,它匹配上面的两个单词。
但是在JavaScript上,我必须在w和s之前添加双反斜杠。就像这样:

var regexp = new RegExp('\\w{3,}\\s','i');

字符串
否则它不起作用。我四处寻找答案,搜索双反斜杠JavaScript正则表达式,但我得到的都是关于如何转义反斜杠等完全不同的主题。有人能解释一下吗?

bqujaahr

bqujaahr1#

你可以不写双反斜杠,但是你需要把正则表达式放在正斜杠里面作为分隔符。

/^\w{3,}\s$/.test('foo ')

字符串
锚点^(* 匹配行边界的开始 ),$ 匹配行的结束 *)有助于进行精确的字符串匹配。您不需要i修饰符,因为\w匹配大小写字母。

xzlaal3s

xzlaal3s2#

为什么?因为在字符串中,“\”将后面的字符引起来,所以“\w”被视为“w”。它本质上是说“按字面意思对待下一个字符,不要解释它”。
为了避免这种情况,“\”也必须加引号,因此“\w”被正则表达式解析器视为“\w”。

vxf3dgd4

vxf3dgd43#

这里的问题与字符串中转义序列的处理有关。在JavaScript中,反斜杠()是一个转义字符,所以字符串中的“\d”就变成了“d”。
要创建想要的正则表达式,需要转义反斜杠本身。也就是说,您应该使用“\d”而不是“\d”:
下面是你的函数的修正版本:

valueGet();
function valueGet() {
    let rgxValue= new RegExp('<myTag myAttrib="\\d+"');
    let myContent='<myTag myAttrib="27"';
    if (rgxValue.test(myContent)) {
        console.log("Match");
    } else {
        console.log("No match");
    }
}

字符串

相关问题