在 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 转义括号? [复制]

JavaScript中RegExp对象

javascript js - RegExp - 在文本中搜索

JavaScript RegExp 对象

JavaScript RegExp 对象

如何在 React-Native Webview 的注入 JavaScript 道具中使用 RegExp?