在 JavaScript RegExp 中复制 Java 的“Pattern.quote”的功能 [重复]
Posted
技术标签:
【中文标题】在 JavaScript RegExp 中复制 Java 的“Pattern.quote”的功能 [重复]【英文标题】:Replicate the functionality of Java's "Pattern.quote" in a JavaScript RegExp [duplicate] 【发布时间】:2011-04-06 13:54:12 【问题描述】:在 Java 中,您可能会尝试使用 Pattern.compile("***.com")
创建一个匹配 URL ***.com
的正则表达式。但这是错误的,因为.
在正则表达式中具有特殊含义。解决这个问题的最简单方法是写Pattern.compile(Pattern.quote("***.com"))
,结果为:Pattern.compile("\\Q***.com\\E")
"quotes" the entire string。
我想在 javascript 中做同样的事情,但是 JavaScript 的正则表达式没有为 \Q
和 \E
赋予任何含义,而且看起来没有 JavaScript 等价物,所以我不确定如何去做。我的第一个想法(请参阅下面的答案)是在 JavaScript 正则表达式中具有特殊含义的任何字符之前放置一个反斜杠,但这似乎很容易出错,我怀疑有人可能知道更好的方法。
这是针对 Firefox 扩展的,因此可以使用 Mozilla 特定的解决方案。
【问题讨论】:
对于以后遇到这个并且好奇的人,我最终以不同的方式解决了它。我想要一个匹配"
的正则表达式,后跟一个特定的字符串,然后是"
。我最终只是搜索/"[^"]+"/
之类的东西(引号,一堆非引号字符,然后是另一个引号),然后遍历所有匹配项以找到与我想要的特定字符串匹配的匹配项。
【参考方案1】:
为了详细说明我的建议,它看起来像这样:
// A RegExp that matches all the characters which have a special meaning in a RegExp
var regexpSpecialChars = /([\[\]\^\$\|\(\)\\\+\*\?\\\=\!])/gi;
我不确定这是否完全正确,因为某些字符(如!
和=
)似乎只在某些情况下具有特殊含义。但是假设它是,那么你会这样做
var quotedURL = url.replace(regexpSpecialChars, '\\$1');
例如,用\$
替换所有$
。然后你可以从quotedURL
构建正则表达式:
var myRegExp = new RegExp(quotedURL, 'gi');
【讨论】:
AFAIK,除了字母和数字之外的所有内容都可以转义。它使结果的可读性更差,但更简单一些(IIRC 在某处声明即使附加字符具有特殊含义,它也会起作用,但我不再知道它是关于什么语言的:D)。以上是关于在 JavaScript RegExp 中复制 Java 的“Pattern.quote”的功能 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Javascript RegExp 转义括号? [复制]