【问题标题】:How to escape regular expression special characters using javascript? [duplicate]如何使用javascript转义正则表达式特殊字符? [复制]
【发布时间】:2011-03-08 02:34:33
【问题描述】:

我需要使用 java 脚本转义正则表达式特殊字符。我该如何实现这一点?任何帮助都应该感激。


感谢您的快速回复。但是我需要转义所有正则表达式的特殊字符。我已经尝试过这段代码,但我无法达到结果。

RegExp.escape=function(str)
            {
                if (!arguments.callee.sRE) {
                    var specials = [
                        '/', '.', '*', '+', '?', '|',
                        '(', ')', '[', ']', '{', '}', '\\'
                    ];
                    arguments.callee.sRE = new RegExp(
                    '(\\' + specials.join('|\\') + ')', 'gim'
                );
                }
                return str.replace(arguments.callee.sRE, '\\$1');

            }

function regExpFind() {
            <%--var regex = new RegExp("\\[munees\\]","gim");--%>
                    var regex= new RegExp(RegExp.escape("[Munees]waran"));
                    <%--var regex=RegExp.escape`enter code here`("[Munees]waran");--%>
                    alert("Reg : "+regex);
                }

这段代码有什么问题?请指导我。

【问题讨论】:

  • 我在此处添加了一个答案 [stackoverflow.com/a/63838890/5979634],尽管 TC39 做出了不幸的决定,但它实施了建议的标准化方法。即使他们看不到标准化的价值,如果我们都可以使用相同的标准,我们也可能会这样做。

标签: javascript regex


【解决方案1】:

使用\ 字符转义正则表达式中具有特殊含义的字符。

要自动化它,你可以使用这个:

function escapeRegExp(text) {
  return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
}

更新:现在有一个标准化这种方法的提议,可能在 ES2016 中:https://github.com/benjamingr/RegExp.escape

更新:上述提案被拒绝,如果需要,请继续自己实施。

【讨论】:

  • ',' 有什么特别之处?只是好奇。
  • @Muneeswaran 这应该是公认的答案!
  • 当我没有逃避正斜杠时,我收到了来自正则表达式验证器的投诉,所以我将它添加到你最优秀的模式/[-[\]{}()*+?.,\\/^$|#\s]/g
  • MDN Docs 也有一个使用string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&amp;') 的建议函数(搜索函数 escapeRegExp)。有人知道它的潜在缺点吗?
【解决方案2】:

使用反斜杠转义字符。例如:

/\\d/

这将匹配 \d 而不是数字字符

【讨论】:

  • 双黑斜线对我有用,谢谢
  • @Ben Rowe 你能建议一个正则表达式来表示像 US$ 这样带有边界的单词吗?我试过 "\b(US\$)\b" 但似乎效果不佳
  • @JeetendraAhuja - "$" 字符不是单词字符,因此 "\b(US\$)\b" 仅在以下字符是单词字符时才匹配。您可能正在寻找“\b(US\$)\B”来表示最后一个是不是一个单词边界。
  • 如果使用带有RegExp的变量,则\需要转义为\\,例如如果要将(a)bc中的(a)替换为空并得到bc,可以写成var regex = new RegExp('\\\(a\\\)' ,"g"); str = str.replace(regex, '');
【解决方案3】:

\ 可以转义特殊字符

将特殊字符转义为文字,将文字字符转义为特殊字符。

例如:/\(s\)/ 匹配 '(s)' 而/(\s)/ 匹配任何空格并捕获匹配项。

来源:http://www.javascriptkit.com/javatutors/redev2.shtml

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2013-02-25
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多