【问题标题】:Finding Plus Sign in Regular Expression在正则表达式中查找加号
【发布时间】:2011-01-02 12:36:18
【问题描述】:
var string = 'abcd+1';
var pattern = 'd+1'
var reg = new RegExp(pattern,'');
alert(string.search(reg));

我昨晚发现,如果您尝试在带有 Javascript 正则表达式的文本字符串中查找加号,则会失败。它不会找到该模式,即使它存在于该字符串中。这必须是因为一个特殊字符。在一段文本中找到加号的最佳方法是什么?另外,还有哪些其他角色会失败?

【问题讨论】:

  • 简单的方法:" [\+] "这是字母表。您可能需要所有加号,然后是" [\+]* "

标签: javascript regex


【解决方案1】:

Plus 在正则表达式中是a special character,因此要将字符表示为数据,您必须通过在其前面加上\ 来对其进行转义。

var reg = /d\+1/;

【讨论】:

    【解决方案2】:
    \-\.\/\[\]\\ **always** need escaping
    \*\+\?\)\{\}\| need escaping when **not** in a character class- [a-z*+{}()?]
    

    但如果您不确定,在您尝试匹配的非单词字符之前包含转义并没有害处。

    数字或字母是单词字符,转义数字是指之前的匹配,转义字母可以匹配不可打印的字符,如换行符(\n)、制表符(\t)或单词边界(\b) ,或一组字符,如任何单词字符 (\w)、任何非单词字符 (\W)。

    除非你是认真的,否则不要转义字母或数字。

    【讨论】:

    【解决方案3】:

    请注意,

    \ 在 RegExp 模式字符串中应该是 \\RegExp("d\+1") 将不起作用,Regexp(/d\+1/) 会出错。

    var string = 'abcd+1';
    var pattern = 'd\\+1'
    var reg = new RegExp(pattern,'');
    alert(string.search(reg));
    //3
    

    【讨论】:

    • 这可以在[A-Z\\+]等字符组中工作吗?
    • 谢谢你! :)
    【解决方案4】:

    您应该在模式中的 + 前面使用转义字符 \。例如。 \+

    【讨论】:

    • 从字符串构造 RegEx 时不会。 “\+”与“+”相同,必须是“\\+”。
    • @David,你的意思是在 C# 中吗?在这种情况下,我通常使用@逐字字符串字符来避免过多的 \\\\\\ 符号;)
    • @Ash: 没有。例如,var pattern = new RegExp("(\\d+)\\s*\\+\\s*(\\d+)");等价于 var pattern = /(\d+)\s*\+\s*(\d+)/;
    【解决方案5】:

    您可能需要转义加号:

    var pattern = /d\+1/
    

    加号在正则表达式中用于表示一行中的 1 个或多个字符。

    【讨论】:

    • 不,要么删除模式周围的引号,使其成为真正的 RegExp 对象,要么在反斜杠前添加一个额外的反斜杠。反斜杠表示 JavaScript 字符串中转义序列的开始。
    【解决方案6】:

    应该是var pattern = '/d\\+1/'

    字符串将'\\' 转义为'\' ('\\+' --> '\+') 所以正则表达式对象初始化为/d\+1/

    【讨论】:

      【解决方案7】:

      如果您想使用+ (plus sign)$ (sigil /dollar sign),则使用\ (backslash) 作为前缀。像那样: \$\+

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-13
        • 2011-10-02
        • 1970-01-01
        • 2015-08-26
        • 1970-01-01
        • 2020-09-08
        • 1970-01-01
        相关资源
        最近更新 更多