2012-10-04 65 views
3

我讀到的正則表達式的一些教程和我看到的一句話:在Javascript中替代(?<= exp)?

(?< = EXP)匹配以下前綴EXP

有關的任何位置,我有一些字符串:

分享

護理

如果我想查找包含「are」的所有字符串,但「are」必須遵循「Sh」:/(?<=Sh)are/i。現在只有「分享」匹配,並且匹配索引是2(匹配「是」,而不是從「分享」中分享)。

但Javascript沒有這個正則表達式。我怎麼能在Javascript中這樣做?

謝謝!

回答

3

你不能這樣做。在Javascript的正則表達式實現中沒有看後面的斷言。

替代

  • 在某些情況下,你可以改用分組捕獲你真正想匹配:/Sh(are)/i

  • 如果你真的需要lookbehinds你可以使用一個第三方正則表達式庫。

相關

+0

謝謝您回答。我想匹配的索引是2(匹配「是」):「分享」。搜索(正則表達式)= 2。任何想法對我? –

+1

@BoodCarley:您可以使用第三方正則表達式庫。查看我的更新以獲取類似問題的鏈接。 –

0

您可以使用non capturing groups

/(?:sh)(are)/ 

這告訴正則表達式找到are沒有捕捉sh組。然而,在這種情況下,你有一個簡單的模式來匹配,這是沒有必要的,你可以找到其他解決方案的答案,這樣做

/sh(are)/ 

匹配則只有第一組

+0

''Share Care'.match(/(?=.+?are)(。+?)/)'returns'[「S」,「S」]' - 測試多少? – WTK

+0

謝謝,但它不是我想要的。 –

0

如果我很好理解,我會用這個正則表達式

/(Sh|\b)(are)/gi 

其中are只能是一個字或Sh前面的子字符串。

+0

感謝您的回答。但是,如果我使用這個正則表達式,匹配的索引是0,而不是2.你能給我更多的解決方案嗎? –

+0

爲什麼指數應該重要?你想匹配什麼字符串?例如,請提供一個小提琴 – fcalderan

+0

以突出顯示結果。我想找到「是」滿足一些條件。 –

2

的唯一方法(當然這,如果你不也有你的正則表達式在先行斷言僅適用)是扭轉字符串,並使用在先行,而不是回顧後的:

/era(?=hS)/i 
+0

你只是想到了我。 –