我正在研究 RegExp 但到处都能看到两种语法
new RegExp("[abc]")
和
/[abc]/
如果使用修饰符,那么附加反斜杠的用途是什么( \
)
/\[abc]/g
这两个我没有发现任何错误,但我想知道这两者之间有什么区别。如果是,那么它是什么,最好使用哪个?
我提到了 Differences between Javascript regexp literal and constructor 但我没有找到关于哪个最好以及有什么区别的解释。
原文由 Gaurav Aggarwal 发布,翻译遵循 CC BY-SA 4.0 许可协议
关键区别在于文字 REGEX 不能接受动态输入,即来自变量,而构造函数可以,因为模式被指定为字符串。
假设您想匹配字符串中数组中的一个或多个单词:
这对于文字
/pattern/
是不可能的,因为两个正斜杠之间的任何内容都按字面解释;我们必须在模式本身中指定允许的单词,而不是从动态源(数组)中读取它们。另请注意,在以这种方式指定模式时需要双重转义(即
\\
)特殊字符,因为我们在字符串中这样做 - 第一个反斜杠必须由第二个转义,所以其中一个使它成为模式。如果只有一个,它将被 JS 的字符串解析器解释为转义字符,并被删除。