Javascript RegExp和边界

时间:2010-06-03 13:46:29

标签: javascript regex word-boundary

一位同事问我关于正则表达式的问题,我似乎无法找到并回答他。

我们在文本编辑器中使用边界突出显示某些文本长度,但这里有一些显示问题的示例代码:

<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>

问题是,第一个文字str.replace有效,但RegExp选项没有。

我在IE和FF中有相同的行为,有谁知道为什么?

5 个答案:

答案 0 :(得分:10)

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

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

你需要这个:

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

传递给RegExp的字符串中有2个退格符,因为\b是将退格插入字符串的转义序列。你需要用另一个反斜杠来逃避每个反斜杠。

答案 1 :(得分:2)

RegExp需要转义转义字符:

new RegExp('\\bAlpha\\b')

答案 2 :(得分:2)

这是一个字符串问题。字符串文字中的\b是退格!

RegExp('\\bAlpha\\b','gim');将是正确的表单

答案 3 :(得分:1)

有两种方法可以在Javascript中编写正则表达式

  1. literal
  2. RegExp对象
  3. 以字面方式,您可以像在教科书中学到的那样使用,例如: / BALABALA / 但是在RegExp对象中,正则表达式被写为字符串。

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

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

    另一种情况是Regexp用textarea或输入框写的。例如,

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

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

答案 4 :(得分:0)

实际上你必须反斜杠传递给 RegExp 构造函数的字符串中的所有东西:

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-"]