2010-06-03 65 views
2

一位同事问我一个正则表达式问题,我似乎无法为他找到答案。Javascript RegExp和边界

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

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

回答

10

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

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

你需要这样的:

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

你传递给正则表达式有2个退格字符它,因为\b是用于插入退格成一个字符串转义序列的字符串。您需要用另一个反斜杠转义每个反斜杠。

+0

Doh,当然;谢谢! – 2010-06-03 13:51:25

+0

还错过了捕获parens:\\ b(Alpha)\\ b – 2010-06-03 14:07:13

+0

是的,我有一个Doh,直到我看到这个答案。 thx – CommentLuv 2012-06-08 05:55:00

2

正则表达式需要有转义字符转义:

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

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

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

1

有2种方式来使用JavaScript编写的正则表达式

  1. 文字
  2. RegExp对象

在文学的方式,您可以根据使用你在你的教科书中学到了,例如/ balabala/ 但是在RegExp对象中,正则表达式被写为一个字符串。

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

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

还有另一种情况,当正则表达式写在textarea或输入框中。例如,

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

在这种情况下,\在正则表达式不需要进行转义。

0

事实上,你必须反斜杠传递给正则表达式构造函数的字符串中的一切:

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