我有一些像10++10--10+-10-+
这样的值。我的问题是如何使用单个reg表达式将这些值替换为匹配值。我需要一个像10+10-10-10-
这样的答案。
它的意思
'++'='+',
'--'='-',
'+-'='-',
'-+'='-';
。请帮我解决问题。
答案 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
)