如何在单个正则表达式中替换多个值?

时间:2016-05-06 07:39:38

标签: javascript regex replace

我有一些像10++10--10+-10-+这样的值。我的问题是如何使用单个reg表达式将这些值替换为匹配值。我需要一个像10+10-10-10-这样的答案。      它的意思

'++'='+',
'--'='-',
'+-'='-',
'-+'='-';

。请帮我解决问题。

2 个答案:

答案 0 :(得分:1)

匹配并捕获需要替换为特定字符串的备选方案,然后使用replace回调查看匹配的组并相应地替换:



var s = '10++10--10+-10-+';
document.body.innerHTML = s.replace(/(\+\+)|([-+]-|-\+)/g, function(m, g1, g2) { 
  return g1? "+" : "-";
});




(\+\+)|([-+]-|-\+)正则表达式包含2个替代组,因为有2个替换模式。第1组(\+\+)将匹配双倍加成,而第2组 - ([-+]-|-\+) - 匹配并捕获--+--+

答案 1 :(得分:1)

仅Regex不具有回调功能的解决方案,因此它可以适用于没有regex替代回调的其他语言。

var s = '10++10--10+-10-+';
document.body.innerHTML = (s + "||||++=>+,+-=>-,-+=>-,--=>-" // Append replacements
  ).replace(/(\+\+|--|-\+|\+-)(?=[\s\S]*\1=>([^,]*))|\|\|\|\|[\s\S]*$/g, "$2" 
// Perform replacements and remove replacements
  )