我有这个正则表达式检测某个字符并在该字符之前或之后添加空格,以便我可以使用.split(" ")
将它们存储在数组中。这个正则表达式是否有简化形式?
2 * 5--4 / 2 = 2 * 5 - -4/2
((1 + 5)* 2/1)=((1 + 5)* 2/1)
var infix = $input.val()
.replace(/(\-\d+)(-)/g, "$1 $2 ")
.replace(/(\-)(\-\d+)/g, " $1 $2")
.replace(/([+/*^()])/g, " $1 ")
.replace(/\s+/g, " ")
答案 0 :(得分:0)
据我了解,您正在尝试添加空格,因此您可以拆分它们。代替。您可以直接拆分为数组,使用保留拆分字符的拆分版本(通过将它们包含在一个组中)。对于拆分正则表达式,请指定一个数字序列(带有可选的前导减号),或者不指定任何内容。这将导致额外的空白字符串,因此请使用过滤器将其删除。
function split(s) {
var number_or_nothing = /(-?[\d.]+|)/;
function non_empty(x) { return /\S/.test(x); }
return s.split(number_or_nothing) . filter(non_empty);
}
> split("2*5--4/2")
< ["2", "*", "5", "-", "-4", "/", "2"]
> split("((1+5)*2/1)")
< ["(", "(", "1", "+", "5", ")", "*", "2", "/", "1", ")"]