2011-09-26 95 views
2

我試圖編寫一個正則表達式來將以下字符串解析爲三個不同的部分。這是我正在寫的一個高亮引擎:Javascript lookahead正則表達式

「\ n在解決方案後可用。」

我有一個正則表達式,可以爲用戶輸入的任何單詞動態創建。在上面的例子中,這個詞是「on」。

正則表達式需要一個帶有任意數量空格的單詞([\ s] *),後跟搜索詞(沒有 - \ w跟在它之後,例如:on-time,on-wards不應該是有效的結果爲了使這個複雜化,可以在這個例子後面加一個 - ,$,<或>符號,所以on,on或on都是有效的,這就是爲什麼在我的常規搜索詞後面有一個負向前瞻表達如下。

有一個複雜的原因,但它是不相關的問題。最後一部分應該是句子的其餘部分。在這個例子中,「和可用的解決方案之後。」

所以,

P1 = 「\ n」 個

P2 = 「開」

P3 = 「和可用溶液後」

我現在有以下正則表達式。

test = new RegExp('([\\s]*)(on(?!\\-\\w))([$\\-><]*?\\s(?=[.]*))',"gi") 

此正則表達式的第一部分([\\s]*)(on(?!\\-\\w))[$\\-><]*?按預期工作。最後一部分沒有。

在最後一部分,我試圖做的是強制正則表達式引擎匹配其他字符前匹配空白。如果它不能匹配一個空格,那麼正則表達式應該結束。然而,當我運行這個正則表達式,我得到下面的結果

str1 = "\nOn ly available after solution." 

test.exec(STR1)

[ 「\ n開」, 「\ n」, 「開」 ]

因此,在我看來,最後積極的展望未能奏效。感謝您的任何建議,如果有人需要澄清,請告訴我。

編輯:

這樣看來,我的正則表達式不匹配,因爲我不知道下面的警告:

您可以使用先行內的任何正則表達式。 (請注意,這不適用於lookbehead,我將在下面解釋它的原因。)任何有效的正則表達式都可以在lookahead中使用。如果它包含捕獲括號,則反向引用將被保存。請注意,前視本身不會創建反向引用。所以它不包括在編號反向引用中。如果你想在反向引用中存儲正則表達式的匹配,你必須在預見範圍內的正則表達式周圍捕獲括號,如下所示:(?=(regex))。另一種方式將不起作用,因爲在反向引用被保存時,lookahead已經放棄了正則表達式匹配。

+1

你想知道如何做到這一點,或者你想知道如何使用正則表達式做呢?正則表達式不是*所有事情的答案,而且你以不同的方式做這件事情會更好。上帝幫助那些試圖閱讀你的代碼的人。 – riwalk

+0

如果還有其他方法可以做到這一點,我很想知道! – user210099

回答

1
  1. 在字符類[.]的點是指一個點文字。如果您想匹配任何角色,請將其更改爲.
  2. 向前看(?=.*)將永遠匹配並且完全沒有意義。如果您只想捕獲該部分字符串,請將其更改爲(.*)
0

我認爲這個問題是你的積極向前看on(?!\-\w)試圖匹配後面沒有-然後\w任何on。我想你想要什麼,而不是爲on(?!\-|\w),它匹配on後面沒有通過- OR \w