我正在使用Java來解析JavaScript文件。由於範圍是不同的,在裏面我是用它的環境比預期的,我想用Java正則表達式:在字符後捕獲部分但不替換字符
window.test = value
此前更換的即
test = value
每次,我剛剛被使用
writer.append(js.getSource().replaceAll("test", "window.test"));
這顯然是不通用的,但對於固定的數據集,它工作正常。
但是,我應該一起工作,舊的更新版本的新文件,我現在要處理
window['test'] = value
和
([[test]])
在這兩種情況下,我都不想匹配test
,而且看起來只有這兩種情況纔有新格式。所以我的計劃是現在做一個正則表達式來匹配任何東西,除了'
和[
作爲第一個字符。那將是([^'\[])test
;然而,我實際上並不想替換第一個角色 - 只要確保它不是我不想匹配的兩個角色之一。
對我來說這是一個新的情況,因爲我還沒有用RegExps替換那麼多,只是模式匹配。所以我環顧四周,發現我認爲的解決方案,即所謂的「非捕獲組」。 Oracle網頁上的解釋聽起來像我正在尋找的內容,但是當我將正則表達式重寫爲(?:[^'\\[])test
時,它的行爲與我沒有改變任何內容完全相同 - 替換test
之前的字符。我環顧了一下StackOverflow,但是我發現讓我更加確信自己在做的事情應該能夠工作。
我在做什麼錯,它沒有按預期工作?我濫用這種模式嗎?
您可以發佈[SSCCE](http://sscce.org/) – vainolo
http://www.regexplanet.com/advanced/java/index。html,以及正則表達式,匹配表達式和結果的例子都是一個例子。 –
你可以參考這個問題http://stackoverflow.com/questions/632204/java-string-replace-using-regular-expressions – Smit