使用正则表达式匹配给定字符串计算中的最后一个数学运算符

时间:2017-03-07 16:34:52

标签: javascript regex

我想使用正则表达式匹配计算字符串中的最后一个数学运算符。

例如,在字符串中:

" 25 + 4-1 * 100/423",它将匹配' /'

或者

" 25 * 2 * 4444 * 123 + 4",它将匹配' +'

我尝试了正则表达式/(\-|\+|\/|\*)(?=[^\-\+\/\*]*$)/,但由于某种原因,它匹配最后一个运算符两次。

例如:

var str = "25+4-1*3" 
var regex = /(\-|\+|\/|\*)(?=[^\-\+\/\*]*$)/
str.match(regex) = ["*", "*"]

2 个答案:

答案 0 :(得分:0)

  

但由于某种原因,它匹配最后一个运算符两次。

     当我输入var str = "25+4-1*3"时,

str.match(regex)我得到["*", "*"]

RegExp#execString#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);