2014-01-13 148 views
0

意味着我必須用正則表達式的問題:是什麼`\ s`正則表達式中

var regex = new RegExp('(^|\\s)' + clsName + '(\\s|$)'); 

是什麼(^|\\s)意思?是不是等於(^|\s)(^|)是什麼意思?

我說得對,它意味着字符串應該以任何字母或空格開頭?我試圖用瀏覽器和console.log進行測試,但仍然無法獲得任何解決方案。

在所有教程中,\s被用來作爲空間模式而不是\\s

好吧,我知道了,問題是:

當使用正則表達式的構造:在您的正則表達式中的每個反斜線,你必須鍵入的正則表達式構造\\。 (在JavaScript字符串中,\\表示單個反斜槓!)例如,以下正則表達式匹配所有前導和尾隨空格(\ s);字符串(^)OR(|)開始一個空間\\s:注意\\s被作爲RegExp的構造函數的第一個參數的一部分傳遞:

re = /^\s+|\s+$/g 
re = new RegExp('^\\s+|\\s+$','g') 

回答

1

(^|\\s)手段。

例如,如果clsName是​​,例如,它建立模式(^|\\s)abc(\\s|$)。 ,搜索​​在開始,中間或結束的字符串,它可以用空格包圍,所以這些都是有效的:

  • ​​
  • "abc x"
  • "x abc"
  • "x abc y"

請注意,在這裏您正在使用字符串來構建RegExp。 JavaScript忽略它不知道的轉義字符 - '\s'將與's'相同,這是不正確的。

另一種選擇是使用word boundaries,但在某些情況下可能會失敗(例如,搜索btn將匹配btn-primary):

var regex = new RegExp('\\b' + clsName + '\\b'); 

我還警告說,clsName威力包含正則表達式元字符,所以你可能想要escape it

0

爲什麼不把字符串拆分成「」?

var string = 'abc defh ij klm'; 
var elements = string.split(' '); 
var clsName = 'abc'; 
elements.filter(function (el) { 
    return el === clsName; 
}); 

不需要像發佈的RegEx那樣的RegEx。

相關問題