我想在JavaScript中编写一个.replace
函数,在代数中实现偶数奇数的负号。在一系列消极和积极的迹象中:
然后我会.replace(/regex for case1/, "-")
和.replace(/regex for case2/, "+")
。关于如何做到这一点的任何想法?
以下是示例字符串:
\frac{a^{n+-m}}{b}
- > \frac{a^{n-m}}{b}
abc+cde=ghj--+--hsnj
- > abc+cde=ghj+hsnj
答案 0 :(得分:1)
([^-+]|^)(?:[+]*-[+]*-)*[+]*-[+]*([^+-])
,如https://regex101.com/r/fU0vY7/4所示,需要替换为$1-$2
([^-+]|^)(?:[+]*-[+]*-[+]*)+([^+-])
对于偶数个连字符,如https://regex101.com/r/fU0vY7/5所示,需要替换为$1+$2
您可以在同一个字符串上使用这两个替换。到目前为止,我测试的所有内容都有效,包括您的示例如果有什么事情发生,请告诉你。
避免捕获组会更方便,但javascript中缺乏lookbehind强迫我添加捕获组并且$1+-$2
各自
答案 1 :(得分:1)
正如vks指出的那样,严格来说,正则表达式无法计数。您可以取消Andris's answer中的对,但正如您所看到的,当您覆盖所有案例时,正则表达式会有点长。另一种方法是将正则表达式匹配与正常函数结合起来:
function do_replacement(x) {
return x.replace(/[+-]+/g,
function (r) {
return r.replace(/\+/g, '').length % 2? '-' : '+';
}
);
}
这将任务分为两部分:
+
和-
+
,并计算剩余的字符(由于原始正则表达式,只能是-
s)+
为零)或奇数-
或length % 2
醇>
答案 2 :(得分:1)
那么你可以用+
替换所有--
,然后相应地替换:
expr.replace(/\+/g, '--').replace(/(--)+-/g, '-').replace(/--/g, '+')
或者您可以使用.replace
中的函数来计算-
的数量:
expr.replace(/[-+]+/g, function(signs){
return '+-'[signs.replace(/\+/g, '').length % 2];
});
答案 3 :(得分:0)
function replace(str) {
return str.replace(/[+-]+/g, function(matched, pos, full) {
// + is 0, - is 1
// the counting is same as XOR of all +/- signs
return matched.split('').reduce(function(a,b) {
return a ^ (b == '-');
}, 0)
? '-'
: '+';
});
}
答案 4 :(得分:-1)
Consider a number say x,
get x%2
if x%2!=0, then '-',
else '+'
这只是一种算法。我希望你能从这里得到你的解决方案。