2010-06-03 64 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-"]