2012-04-30 86 views
0

我發現下面的正則表達式奇怪的JavaScript正則表達式

new RegExp("(^|\\s)hello(\\s|$)"); 

我指http://www.javascriptkit.com/jsref/escapesequence.shtml對正則表達式.. 但我不能看到\ S轉義序列there..I知道\ S表示空格字符.. 但是前面的\做什麼..哪個字符被轉義? 我發現了類似的正則表達式中Treewalker代碼以下文獻http://ejohn.org/blog/getelementsbyclassname-speed-comparison/

+0

''\\是一個轉義斜線,翻譯成'\'。如果你想要空格,你應該使用'\ s',用一個斜槓。 – Nadh

回答

4

\\中是逃避字符串內反斜線。換句話說,對於正則表達式,\\將被解釋爲\

+0

好的簡單\被視爲字符串sowe中的逃生需要兩個斜槓嗎? –

+0

準確地說,代碼需要轉義反斜槓才能使正則表達式將其視爲單個反斜槓,這將使其將'\ s'作爲空白字符。 – DangerMonkey

1

在這種情況下,額外的\是爲了躲避\中\ S。因爲我們在一個字符串聲明中,所以你必須加倍\以逃避它。一旦字符串被處理並保存,它會被縮減爲(^ | \ s)hello(\ s | $)

1

緊接在第一個\之後的字符會被轉義。通常,\ss轉義爲「空白」。在你的例子中,被轉義的字符是\

你有什麼是它建立一個正則表達式的表達式(大概是爲了在別處通過)的(^|\s)hello(\s|$) —單詞「hello」開頭或者由空格或字符串的開始,並隨後由空格或字符串的末尾。

1

本質上講了reg前正在做,正在尋找開閉周圍單詞Hello文本的項目,從字面上解釋「\ s」,因爲在同一時間字符串的內容。

在深入淺出方面,它在尋找一個字符串完全匹配:

| \ shello \ S |

正如其他人所說的雙\是逃逸單\使代替REG EX引擎尋找空白它實際上查找「\ S」作爲一個字符串。

的^表示線的開始,$表示行尾和2 |被解釋爲實際的字符來尋找

最後你開始和結束標記括號(),這意味着它們將被提取並放置在比賽中,你使用C#的意味着你可以使用他們得到:

myRegex.Matches.Group[1].Value 
myRegex.Matches.Group[2].Value 

1爲開頭分組,和2被結束。