2017-10-09 146 views
0

如何在Node js/Javascript中執行以下操作?替換並保留Node js中字符串的某些部分

例如,說原來的occurence =「xyz-abc-def」 我想用「123-abc-456」替換上述字符串的整個出現。 xyz和def在上面的字符串中是常量,而abc可以是原始發生時的任何字符串。例如。

"xyz-asd-def" -> "123-asd-456" 
"xyz-ghj-def" -> "123-ghj-456" 

我該如何在節點js中做到這一點?

+0

雖然在SO上提出問題是解決問題的真正好方法,但我會建議你首先要有一個更深的正則表達式教程,這對於正則表達式來說是一個相當簡單的問題 –

+1

假設「xyz」和「def」在整個字符串中是唯一的,是否安全?另外,你會在單個字符串中出現多少次事件?最後,你真正嘗試過什麼?展示你的工作。 – James

+0

@詹姆斯你是對的。我其實並不知道如何做到這一點,我也不確定在網上搜索這種情況。其實,我對Node js和javascript非常新穎。我今天正在寫我的第一個劇本。 – hatellla

回答

2

您可以用正則表達式做到這一點。

var reg = /xyz-(.+?)-def/g; 
var input = 'xyz-asd-def'; 
var result = input.replace(reg, '123-$1-456'); 
+0

是的,你可以,但這個解決方案是脆弱的 - 試試這個與「xyz-asd-def xyz-dsa-def」,或任何其他包含更多的字符串變體比一種模式。這可能並不重要,但解釋解決方案的侷限性很重要。 – James

+0

@詹姆斯你是對的,在這種情況下,貪婪的正則表達式會失敗。這種行爲可以通過使其懶惰來輕鬆改變,並且這種行爲的用例決定了它的行爲方式。我更新了我的答案以使用懶惰的正則表達式,因爲這似乎更適合於這種情況下的問題。 –

0

您可以使用正則表達式替換您要替換的每個文本字符串的所有實例。

"def-xyz-asd-def" 
    .replace(new RegExp("xyz","g"), "123") 
    .replace(new RegExp("def","g"), "456"); 

會導致 「456-123-ASD-456」

+0

儘可能多的工作,有更多的優雅的方式 – James

0

基於您的要求的錯綜複雜,最佳路線是Regex

您可以使用捕獲組僅提取所需字符串的部分,並且,如果模式不變,則可以重新生成字符串,例如

"xyz-asd-def".replace(/xyz-(\S+)-def/, "123-$1-456"); 

這將捕獲「xyz-xxx-def」模式內的任何非空白字符,且沒有長度限制。如果您希望在單個字符串中使用此模式的多個實例,請使用全局替換選項(將g附加到正則表達式的末尾)