代码之家  ›  专栏  ›  技术社区  ›  Russ Clarke

Javascript RegExp和边界

  •  2
  • Russ Clarke  · 技术社区  · 16 年前

    一位同事问我一个正则表达式问题,我似乎找不到答案。

    <script type="text/javascript">
    var str = "Alpha , Beta, Gamma Delta Epsilon, AAlphaa, Beta Alpha<br/>";
    var rx = new RegExp('\bAlpha\b','gim');
    
    document.write(str.replace(/\b(Alpha)\b/gim, '-- $1 --'));
    document.write(str.replace(rx, '== $1 =='));
    </script>
    

    我在IE和FF中也有同样的行为,有人知道为什么吗?

    5 回复  |  直到 16 年前
        1
  •  11
  •   A. Levy    16 年前

    我猜它不起作用,因为您需要转义传递给RegExp的字符串中的反斜杠。你有这个:

    var rx = new RegExp('\bAlpha\b','gim');
    

    var rx = new RegExp('\\bAlpha\\b','gim');
    

    传递给RegExp的字符串中有2个退格字符,因为 \b

        2
  •  2
  •   Andy E    16 年前

    new RegExp('\\bAlpha\\b')
    
        3
  •  2
  •   Matt    16 年前

    这是一个字符串问题。 \b

    RegExp('\\bAlpha\\b','gim'); 是正确的形式

        4
  •  1
  •   unigg    16 年前

    1. 字面意义的
    2. RegExp对象

    从字面上讲,你用你在课本上学到的东西,例如/balabala/

    尝试下面的代码,您知道字符串在javascript中的行为。

    alert("O\K");
    alert("O\\K");
    

    还有一种情况是Regexp写在文本区域或输入框中。例如,

    http://www.pagecolumn.com/tool/regtest.htm

    在这种情况下,不需要转义Regexp中的。

        5
  •  0
  •   Stan    15 年前

    正则表达式 施工单位:

    var re = /my_([\w_]+-\d-)regexp/
    

    相当于:

    var re = new RegExp("my_\(\[\\\w_\]+-\\\d-\)regexp")
    

    两者都符合以下愚蠢的例子:

    "my_very_obvious-4-regexp".match(re)
    ["my_very_obvious-4-regexp", "very_obvious-4-"]