Regex实现偶数负符号规则
Regex to implement even-odd rule of negative signs
我想用JavaScript编写一个.replace
函数,它实现代数中负符号的奇偶规则。在一系列消极和积极的迹象中:
- 情况1:如果有奇数个负号,则相当于一个负号
- 情况2:如果有偶数个负号,则相当于一个正号
所以我会做.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
您可以用--
替换所有+
,然后相应地替换:
expr.replace(/'+/g, '--').replace(/(--)+-/g, '-').replace(/--/g, '+')
或者,您可以使用.replace
中的函数来计算-
的数量:
expr.replace(/[-+]+/g, function(signs){
return '+-'[signs.replace(/'+/g, '').length % 2];
});
正如vks所指出的,严格来说,正则表达式不能计数。您可以像Andris的回答中那样取消对,但正如您所看到的,当您涵盖所有情况时,regexp会变得有点长。另一种选择是将正则表达式匹配与一个正常函数结合起来:
function do_replacement(x) {
return x.replace(/[+-]+/g,
function (r) {
return r.replace(/'+/g, '').length % 2? '-' : '+';
}
);
}
这将任务分为两部分:
- 使用正则表达式匹配
+
和-
的任意序列 - 在替换函数中,从匹配的字符串中删除
+
s,并计算剩余字符(由于原始regexp,只能是-
s( - 根据计数是偶数(即
length % 2
为零(还是奇数,返回+
或-
([^-+]|^)(?:[+]*-[+]*-)*[+]*-[+]*([^+-])
表示奇数个连字符,如图所示https://regex101.com/r/fU0vY7/4,需要更换为$1-$2
([^-+]|^)(?:[+]*-[+]*-[+]*)+([^+-])
表示偶数连字符,如图所示https://regex101.com/r/fU0vY7/5,需要更换为$1+$2
可以在同一字符串上使用两个替换。到目前为止,我测试的所有东西都有效,包括你的例子。如果有什么不对劲,一定要告诉我。
避免捕获组会更方便,但javascript中缺少lookbacking迫使我分别添加捕获组和$1+-$2
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)
? '-'
: '+';
});
}
Consider a number say x,
get x%2
if x%2!=0, then '-',
else '+'
这只是一个算法。我希望你能从这里得到你的解决方案。
相关文章:
- 在.csv文件中写入学位符号
- 使用相同的数据集绘制各种符号
- 用Javascript修改内部标记的CSS规则
- 将带点符号的属性(有时)传递给函数
- RegEx JavaScript:数字后的符号提取
- 如何禁用和启用css规则
- 如何在计算器符号为零时替换它
- 在验证器中添加自定义规则以检查<ul>具有元素
- 如何在JavaScript中创建打字机效果,这将考虑html标记规则
- 删除输入中输入的符号
- 如何在ReactJs中渲染重音符号
- 如何替换JavaScript字符串中除字母和数字之外的所有内容(空格/符号)
- 插入符号到底是什么
- Magento目录价格折扣规则不适用于产品详细信息页面
- 删除图形和数字之间的连字符(-)符号
- 我有多个复选框,并希望为其中 2 个制定规则,以便如果我选择 1 个,则无法选择另一个
- 浏览器intl.NumberFormat未正确显示货币符号
- JS toLocaleString始终显示货币符号,而不考虑区域设置
- 将插入符号位置移动到ContentEditable<DIV>
- Regex实现偶数负符号规则