我知道您可以在正则表达式中的符号前放置\
来描述模式中的文字字符。例如,$
转换为字符串锚的末尾,而\$
则匹配美元符号。
但是,如果要匹配连续字符的 group 组,怎么办?
我想构造一个这样的正则表达式:
var group = "[$]"; // this changes dynamically
var pattern = new RegExp("\\d+" + group);
并匹配此字符串中的以下内容(帽子符号指向开始和结束):
lorem ipsum 36[$] amet
------------^---^-----
上面的代码将不起作用,因为实际的Regex模式是/\d+[$]/
,它将[$]
部分解释为一个“词法”组(我不知道它的术语),仅包含$
,并且可以匹配非常不同的内容:
var group = "[$]";
var pattern = new RegExp("\\d+" + group);
console.log(pattern.test("lorem ipsum 36[$] amet")); // this should match
console.log(pattern.test("lorem ipsum 36$ amet")); // instead of this
此问题的明显解决方案是在组中的每个字符前面加上\
和繁荣,它起作用:
var group = "\\[\\$\\]";
var pattern = new RegExp("\\d+" + group);
console.log(pattern.test("lorem ipsum 36[$] amet")); // this correctly matches
console.log(pattern.test("lorem ipsum 36$ amet")); // this correctly doesn't match
(在上面的脚本中,我使用\\
而不是\
,因为在字符串声明中使用了一个反斜杠,而正则表达式则使用了另一个反斜杠)
正则表达式本身中是否存在一些允许我定义应按字面读取的字符的 group 的构造?例如,如果您使用一个捕获组(foo)
并像?:
那样向其添加(?:foo)
,它将成为一个非捕获组。是否有任何东西要添加到捕获组中,使其成为一个“文字上的”组,并从字面上匹配所有内容?否则我必须坚持使用反斜杠...
在我的梦中,类似/\d+(\:[$])/
的东西会与36[$]
中的lorem ipsum 36[$] amet
匹配。