gpt4 book ai didi

新正则表达式 ('regex' , 'flags' ) 和/regex/flags 之间的 JavaScript 差异

转载 作者:行者123 更新时间:2023-11-30 12:22:05 28 4
gpt4 key购买 nike

var a = 'toto titi (should be removed) 5'.replace(/\(.*\)|\[.*\]|[^a-zA-Z0-9 ]|tata|tutu|tyty/gi, '!$!');
var b = 'toto titi (should be removed) 5'.replace(new RegExp('\(.*\)|\[.*\]|[^a-zA-Z0-9 ]|tata|tutu|tyty', 'gi'), '!$!');
console.log(a);
console.log(b);

我想用空格替换不是数字或字母或空格的每个字符以及介于 () 和 [] 之间的字符。我有 2 个相同的句子,并且使用相同的模式。唯一的区别是我为 var a 使用了 /regex/flags 语法,而对象语法为 new Regex('regex','flags') 用于 var b

然而,a 和 b 的结果不同。

输出是:

toto titi !$! 5 //a (it's the expected result)
!$!!$! //b

我不明白为什么。你能给我解释一下吗?我必须使用对象语法,因为我需要使用变量构建我的正则表达式。

最佳答案

在字符串中,反斜杠(\)用于转义特殊字符,例如\\\'\"。在正则表达式中,反斜杠也用于转义,例如文字 \(\.

这意味着当从字符串创建正则表达式时,您还需要转义字符串中的反斜杠。所以你会这样做:

new RegExp('\\(.*\\)|\\[.*\\]|[^a-zA-Z0-9 ]|tata|tutu|tyty', 'gi')

使用它可以得到预期的结果。

关于新正则表达式 ('regex' , 'flags' ) 和/regex/flags 之间的 JavaScript 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654379/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com