2016-09-20 52 views
0

在Javascript中,我想下面的原始字符串:Javascript(正則表達式):我如何替換(反斜槓+雙引號)對?

我要替換\ 「這種\」 和\ 「\那」 字,但不是一個 「這裏」

..變成這樣:

我想取代^ ^這^和那個^話,但不是一個「這裏」

我想事端g像:

var str = 'I want to replace \"this\" and \"that\" words, but NOT the one "here"'; 
str = str.replace(/\"/g,"^"); 
console.log(str); 

演示:JSFiddle here

但仍 ..輸出爲:

我想取代^ ^這^和那個^話,但不是一個^ ^這裏

這意味着我想要的僅替換\"事件,而不是僅替換"。但是我不能。

請幫忙。

+2

啓動'var str ='的代碼行創建一個零反斜槓的字符串。在字符串文字中,如果你想讓結果字符串包含一個反斜槓,你必須將其轉義:'var str ='I ... \\「this \\」and ...''。你也必須避開你的正則表達式中的反斜槓。 – nnnnnn

+0

^那裏,在字符串文字轉義字符被視爲...轉義字符 - > https://jsfiddle.net/adeneo/ddst9ok2/ – adeneo

+0

是的,所以..我如何在JS中實現這一點? –

回答

2

作爲@ adeneo的評論,您的字符串創建錯誤,並不完全符合您的期望。請試試這個:

var str = 'I want to replace \\"this\\" and \\"that\\" words, but not the one "here"'; 
str = str.replace(/\\\"/g,"^"); 
console.log(str); 
+1

您不需要在正則表達式中轉義''''。 – nnnnnn

1

您可以使用RegExp/(")/String.prototype.lastIndexOf()String.prototype.slice()檢查,匹配的是最後一個或第二對輸入字符串的最後一場比賽。如果爲true,則返回原始匹配項,否則將替換爲"^"字符。

var str = `I want to replace \"this\" and \"that\" words, but NOT the one "here"`; 
 

 
var res = str.replace(/(")/g, function(match, _, index) { 
 
    return index === str.lastIndexOf(match) 
 
     || index === str.slice(0, str.lastIndexOf(match) -1) 
 
         .lastIndexOf(match) 
 
     ? match 
 
     : "^" 
 
}); 
 
console.log(res);

+1

您沒有正確表達OP給出的字符串。要在JS中把它重現爲一個字符串文字,你需要編寫'\\'' – 2016-09-20 03:39:26

+0

這個解決方案已經過於複雜了!這可以更容易實現 – Benjamin

+2

這個假設不匹配的東西總是在最後的字符串,並且忽略了OP的要求,在反斜槓上加上雙引號(即使OP對此意思很混淆)。 – nnnnnn

0

與String.prototype.replace的問題是,只替換第一次出現沒有正則表達式。爲了解決這個問題,你需要添加一個g和表達式的末尾,就像這樣:

var mod = str => str.replace(/\\\"/g,'^'); 
mod('I want to replace \\"this\\" and \\"that\\" words, but NOT the one "here"'); 

一個不太有效,但更容易理解做你想要的是將字符串分隔符分割,然後加入它與更換,就像這樣:

var mod = str => str.split('\\"').join('^'); 
mod('I want to replace \\"this\\" and \\"that\\" words, but NOT the one "here"'); 

注意:你可以用一個字符串以'或者,即「一個,你將需要把\在前面的‘假設你的字符串包含的內容。’ 「爲"a"a"導致語法錯誤。 'a"a'不會導致語法錯誤,因爲解析器知道「是字符串的一部分,但是當您將\放在\的前面」或任何其他特殊字符時,它表示以下字符是特殊字符。所以'a\"a' === 'a"a' === "a\"a"。如果要存儲\,則無論使用哪種報價類型,都需要使用「\」,因此要存儲\「,您需要使用'\\"','\\\"'"\\\""

+0

在'\「'和'正則表達式之間的正則表達式裏面有什麼區別? 「',不逃避它? – 2016-09-20 03:43:17

+0

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 –

相關問題