2

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

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

<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 中有相同的行为,有人知道为什么吗?

4

5 回答 5

11

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

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

你需要这个:

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

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

于 2010-06-03T13:49:08.377 回答
2

RegExp 需要转义转义字符:

new RegExp('\\bAlpha\\b')
于 2010-06-03T13:49:29.597 回答
2

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

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

于 2010-06-03T13:49:44.073 回答
1

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

  1. 文字
  2. 正则表达式对象

在字面上,你使用你在教科书中学到的,例如 /balabala/ 但是在 RegExp 对象中,正则表达式被写成一个字符串。

试试下面的代码,你就知道字符串在 javascript 中的行为了。

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

还有一种情况是正则表达式写在文本区域或输入框中。例如,

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

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

于 2010-06-03T14:08:25.607 回答
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-"]
于 2011-08-02T12:50:43.263 回答