請考慮javascript代碼下面的部分:只更換正則表達式匹配
"myObject.myMethod();".replace(/\.\w+\(/g, "xxx");
它給「myObjectxxx);
」爲「.myMethod(
」被選中。
現在我只會選擇myMethod
。換句話說,我想選擇以.
開頭並以(
(不包括)開頭的任何單詞。
謝謝,盧卡。
請考慮javascript代碼下面的部分:只更換正則表達式匹配
"myObject.myMethod();".replace(/\.\w+\(/g, "xxx");
它給「myObjectxxx);
」爲「.myMethod(
」被選中。
現在我只會選擇myMethod
。換句話說,我想選擇以.
開頭並以(
(不包括)開頭的任何單詞。
謝謝,盧卡。
籠統的回答:捕獲要保持與括號內的部分,包括它在替換字符串中爲$1
。
有關詳細信息,請參閱任何正則表達式替換教程。
這裏:只需在您的替代字符串中包含.
和(
。
對於練習,寫一個正則表達式,將轉方案--ABC--DEF--
的任何字符串--DEF--ABC--
爲ABC
和DEF
任意字母值。所以--XY--IJK--
應該變成--IJK--XY--
。在這裏你確實需要使用捕獲組和反向引用。
您可以使用lookaround斷言:
.replace(/(?<=\.)\w+(?=\()/g, 'xxx')
這些將使比賽,而在同一時間不是比賽本身的一部分成功。因此,你只需要替換它們之間的部分。
爲人們熟悉的正則表達式的更容易的選擇可能是僅僅包括在更換.
和(
還有:
.replace(/\.\w+\(/g, ".xxx(")
一種不使用'\ 1'的解決方法,不是嗎?我的意思是,太多人不知道前瞻和後顧之憂,但往往他們與更高的成本相關聯。特別是在這裏,當它們在弦的開始或尾部時,無論如何都要被替換。 –
也許吧。然而,有兩件事情需要保留,所以你基本上需要'-replace'(\。)\ w +(\()','$ 1xxx $ 2'(對不起,回到PowerShell)。可讀性比'-replace'\。\ w + \(','.xxx(''。在任何情況下,環視都不會明顯更昂貴(如果有的話),並且教人們新的概念很難被認爲是錯誤的。 – Joey
是的,我錯過了這些字符串甚至是固定的字符串,然後立即包含它們當然更容易,但是,他應該瞭解使用捕獲組,例如交換兩個值 –
我建議稍微不同的方法:
"myObject.myMethod();".replace(/^([^\.]*\.)\w+(\(.*)$/g, "$1xxx$2");
雖然簡單的解決方案已經提出。
那麼,這也是我也建議的那個,捕獲組是正則表達式的一個關鍵特性,每個人都應該知道。 –
@ Anony-Mousse:同意,但我有點困惑你的答案中有'\ 1'。 IIRC,這只是在正則表達式本身中引用一個組的方式,而不是需要'$ 1'的替換字符串。如果我錯了,請糾正我。 –
這取決於你的正則表達式的方言。我猜JS只使用'$ 1'。 Perl既可以,sed也可以使用'\ 1' IIRC。 –
非常感謝!我終於理解了使用括號和$替換... – lviggiani