2016-09-20 531 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)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –

相关问题