2016-11-29 52 views
1

内更换角色,我有两个测试字符串:正则表达式的报价

1+":"+2:xyz 
1+"a:fb"+2:xyz 

我试图取代:这是引号之间。

我尝试这样做:

$1Q$2 

但我结束了这一点::

(".*):(.*") 

与更换

1+"Q"+2:xyz 
1+"Q"+2:xyz 

,但我想这结束了:

1+"Q"+2:xyz 
1+"aQfb"+2:xyz 

有人可以帮我解决请。必须使用Javascript。

编辑:

我转我的测试工具,一个可以正常工作(即做直接在JavaScript在浏览器中)。

这现在工作:

var str = '1+"a:fb"+2:xyz'; 
var res = str.replace(/(".*):(.*")/g, "$1Q$2"); 

但如果我有两个:在两套引号,像这样:

1+"a:fb"+2+":" 

现在我得到这样的结果:

1+"a:fb"+2+"Q":xyz 
+0

你的正则表达式中的所有反斜杠是怎么回事?没有巫毒逃脱。逃避必须逃脱的东西,只有那些东西。 – Tomalak

+0

我总是逃脱报价 - 看起来像我不需要 - 现在已经改变它 – Graham

+2

您的方法不按预期工作吗? https://regex101.com/r/sogO6I/1 – Danilo

回答

4

实际上,您试图替换由三部分组成的模式:

  1. 位与一个"开始,既不含"也不:
  2. 一个:
  3. 有点既不包含"也不:并用"

结束,因此表达会是什么样子:

("[^:"]*):([^:"]*") 

取代$1Q$2这导致

1+"Q"+2:xyz 
1+"aQfb"+2:xyz 

之所以你没有正常工作在于greedy matching

+0

啊哈 - 这适用于我编辑的版本 - 谢谢 – Graham

+1

一定要花一些时间来冥想贪婪的匹配。它有可能咬你,它有潜力成为一个非常有效的工具。知道它如何工作是关键。 – Tomalak