java - 在 JavaScript RegExp 中复制 Java 的 "Pattern.quote"的功能

标签 java javascript regex string firefox-addon

<分区>

在 Java 中,您可能会尝试使用 Pattern.compile("stackoverflow.com") 创建一个与 URL stackoverflow.com 匹配的正则表达式。但这是错误的,因为 . 在正则表达式中具有特殊含义。解决此问题的最简单方法是编写 Pattern.compile(Pattern.quote("stackoverflow.com")),结果为:Pattern.compile("\\Qstackoverflow.com\\E") 其中 "quotes" the entire string .

我想在 JavaScript 中做同样的事情,但是 JavaScript 的正则表达式没有为 \Q\E 赋予任何意义而且它看起来不像有一个等效的 JavaScript,所以我不确定如何去做。我的第一个想法(请参阅下面的回答)是在 JavaScript 正则表达式中具有特殊含义的任何字符前放置一个反斜杠,但这似乎很容易出错,我怀疑有人可能知道更好的方法。

这是针对 Firefox 扩展的,因此可以使用特定于 Mozilla 的解决方案。

最佳答案

为了详细说明我的建议,它看起来像这样:

// 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 构建 RegExp:

var myRegExp = new RegExp(quotedURL, 'gi');

关于java - 在 JavaScript RegExp 中复制 Java 的 "Pattern.quote"的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3614440/

相关文章:

java - 无法使按键监听器工作

java - 根据用户输入的 java 动态选择两个网卡的 IP 地址,以及演示连接

javascript - 强制浏览器在 asp.net 应用程序中获取最新的 js 和 css 文件

javascript - HTML - 如何仅在激活省略号时显示工具提示

php - 创建正则表达式

ios - Markdown 和链接的特定正则表达式

Python正则表达式负向后查找,包括行首

Java 使用字符串参数实例化对象时出现问题

java - 一次只播放一个音频文件?

javascript - React Reuse 在整个组件中获取 JSON 数据