[英]replace special character }} in a string with “” using regexp in java
[英]Java RegExp: Capture part after a character but don't replace the character
我正在使用Java來解析JavaScript文件。 由於作用域與我在其中使用的環境不同,因此我嘗試替換ie的每個實例
test = value
與
window.test = value
以前,我一直在使用
writer.append(js.getSource().replaceAll("test", "window.test"));
這顯然不能推廣,但對於固定數據集而言,它可以正常工作。
但是,在我應該使用的新文件中,舊文件的更新版本中,我現在必須處理
window['test'] = value
和
([[test]])
在這兩種情況下,我都不想匹配test
,並且似乎只有這兩種情況存在新格式。 所以我的計划是現在做一個正則表達式以匹配'
和[
作為第一個字符。 那將是([^'\\[])test
; 但是,我實際上並不想替換第一個字符-請確保它不是我不想匹配的兩個字符之一。
這對我來說是一個新情況,因為我沒有花太多時間來用RegExps進行替換,而只是進行模式匹配。 因此,我環顧四周,發現我認為是解決方案的方法,稱為“非捕獲組”。 Oracle頁面上的解釋聽起來像我在尋找什么,但是當我將正則表達式重新編寫為(?:[^'\\\\[])test
,它的行為與我沒有做過的行為完全相同改變了一切-替換test
前的字符。 我環顧了StackOverflow,但發現的內容使我更加確信自己所做的應該可行。
我無法按預期工作,這是什么意思? 我在濫用圖案嗎?
如果您在正則表達式中包含該字符的表達式,則它將成為匹配項的一部分。
訣竅是使用您在替換字符串中匹配的內容,以便您自己替換該位。
嘗試:
replaceAll("([^'\[])test", "$1window.test"));
替換字符串中的$ 1是對匹配的捕獲組1的反向引用。 在這種情況下,這是測試前的字符
為什么不簡單地對"(test)(\\s*)=(\\s*)([\\w\\d]+)"
? 這樣,您只匹配"test"
,然后是空格,后跟一個'='
符號,后跟一個值(在這種情況下,由數字,字母和下划線組成)。 然后,您可以使用組(在括號之間)將值-甚至將空格(如果需要)復制到新文本中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.