2013-08-29 66 views
1

我有以下的正則表達式:正則表達式,包括單詞搜索領先的空間

((^|[^a-zA-ZäöåüßÄÖÅÜ])'+targetword+'(?![a-zA-ZäöåüßÄÖÅÜ]))(?![^<]*(?:<\/script|>)) 

,我用它來尋找targetword並鏈接出來,但只有當這個詞是不是一部分的另一個詞。

編輯:正則表達式用於RegExp對象中的JavaScript。

換句話說,'the'將被鏈接,但o'the'r'the'apy不會。

問題是,上面的表達式還包括鏈接中的前導空格。因此'the'在鏈接文本中變成' the'

我發現找到在這個非常的網站排除前導空格一些解決方案,但我還沒有找到一種方法將它們嵌入到上述表達爲正則表達式真的不是我的強項。

回答

1

基本上你只需要定義空格是不是你的對手組的一部分:

(?:(?:^|[^a-zA-ZäöåüßÄÖÅÜ])\s*(targetword)(?![a-zA-ZäöåüßÄÖÅÜ]))(?![^<]*(?:<\/script|>)) 

應招(注意匹配的,但在targetword前排除空格(S)) 更換targetword當然你的變量。

+0

我實現了這個解決方案。 這個正則表達式結合我的鏈接功能實際上完全剝離了領先空間,但我設法通過在鏈接創建功能上添加空間來解決這個問題。 –

1

這正則表達式是不完全一樣的,你似乎在尋找什麼,但它可能工作得更好。

"\b" + targetword + "\b" 

\ b的意思是這個詞應該是孤立的。 這還包括符號,空格和數字。

如果這不是你正在尋找的東西,抱歉給您帶來不便。

+0

這不起作用。JavaScript的'\ b'不能識別重音字母,如「ö」和「å」作爲單詞字符。所以如果你試圖匹配(例如)'\bfoö\ b',它會失敗,因爲'ö'後面的位置不是一個字邊界。 –

0

您可以使用"\b" + targetword + "\b",這將在大多數情況下工作,但是這將字符串Sarah's car is broken在這個詞donald,並在串O'Donald或匹配Sarah匹配。

我會使用外表屁股,並期待aheads驗證

  • 前面的字符是空格,串的開始,或可接受的標點符號
  • 尾隨字符是空格,串的端部,或可接受的標點符號

這些允許的字符可根據您的實際使用情況。

"(?<=[\s",.]|^)" + targetword + "(?=[\s",.\r\n]|$)"

enter image description here

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
    (?<=      look behind to see if there is: 
-------------------------------------------------------------------------------- 
    [\s",.]     any character of: whitespace (\n, \r, 
          \t, \f, and " "), '"', ',', '.' 
-------------------------------------------------------------------------------- 
    |      OR 
-------------------------------------------------------------------------------- 
    ^      the beginning of the string 
-------------------------------------------------------------------------------- 
)      end of look-behind 
-------------------------------------------------------------------------------- 
    targetword    'targetword' 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    [\s",.\r\n]    any character of: whitespace (\n, \r, 
          \t, \f, and " "), '"', ',', '.', '\r' 
          (carriage return), '\n' (newline) 
-------------------------------------------------------------------------------- 
    |      OR 
-------------------------------------------------------------------------------- 
    $      before an optional \n, and the end of 
          the string 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
+0

OP沒有說他使用的是哪種正則表達式,但我非常肯定它是JavaScript,它不支持lookbehinds。 –

+0

謝謝你的詳細解釋。像@Alan Moore指出的那樣,從問題中遺漏了JavaScript,特別是如果這使得解決方案不可行,道歉。 –

相關問題