我想使用正则表达式匹配计算字符串中的最后一个数学运算符。
例如,在字符串中:
" 25 + 4-1 * 100/423",它将匹配' /'
或者
" 25 * 2 * 4444 * 123 + 4",它将匹配' +'
我尝试了正则表达式/(\-|\+|\/|\*)(?=[^\-\+\/\*]*$)/
,但由于某种原因,它匹配最后一个运算符两次。
例如:
var str = "25+4-1*3"
var regex = /(\-|\+|\/|\*)(?=[^\-\+\/\*]*$)/
str.match(regex) = ["*", "*"]
答案 0 :(得分:0)
但由于某种原因,它匹配最后一个运算符两次。
当我输入var str = "25+4-1*3"
时,
str.match(regex)
我得到["*", "*"]
RegExp#exec
和String#match
都返回一个结果数组,其中整体匹配(对于整个表达式)作为第一个条目,然后将任何捕获组的值作为后续条目。由于您有一个捕获组,这意味着您可以在第一个和第二个位置看到操作员。
只需删除捕获组(使其成为非捕获组),因为前瞻以外的整个表达式都是捕获组:
var regex = /(?:\-|\+|\/|\*)(?=[^\-\+\/\*]*$)/;
// ^^^^^^^^^^^^^^^---- non-capturing group
var str = "25+4-1*3"
console.log(str.match(regex));
如果由于某种原因你需要捕获组(例如,如果表达式不仅仅是前瞻),你会保留它但是然后忽略数组中的第一个条目(如果你只想要捕获)。
答案 1 :(得分:0)
您的正则表达式绝对正常。您只需在匹配字符串时添加全局(g
)标志。
var str = "25+4-1*3";
var result = str.match(/(\-|\+|\/|\*)(?=[^\-\+\/\*]*$)/g);
console.log(result);