匹配一组连续的文字字符

时间:2018-09-04 19:52:06

标签: javascript regex

我知道您可以在正则表达式中的符号前放置\来描述模式中的文字字符。例如,$转换为字符串锚的末尾,而\$则匹配美元符号。

但是,如果要匹配连续字符的 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匹配。

0 个答案:

没有答案