我試圖編寫一個正則表達式來將以下字符串解析爲三個不同的部分。這是我正在寫的一個高亮引擎: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已經放棄了正則表達式匹配。
你想知道如何做到這一點,或者你想知道如何使用正則表達式做呢?正則表達式不是*所有事情的答案,而且你以不同的方式做這件事情會更好。上帝幫助那些試圖閱讀你的代碼的人。 – riwalk
如果還有其他方法可以做到這一點,我很想知道! – user210099