我想对字符串中的数字进行运算,但该运算取决于该数字之前的字符,因此我需要获取字符串中任何数字之前的字符。 注意数字前面的字符可以是另一个数字。
到目前为止,我已经完成了 /(.)[0-9]/g
,但这与一个数字在另一个数字之前的情况不匹配。例如:
positions: 0123456789012
string: a a4 bb4 c44c
匹配:
a4
[2-3]b4
[5-6]c4
[9-10]
它与 44
[10-11]
我怎样才能匹配这个呢?
最佳答案
您可以使用更简单的正则表达式:
/(?=(.[0-9]))./g
请参阅regex demo
此正则表达式匹配除换行符和回车符 (.
) 之外的任何字符,即除 LF/CR 之外的任何字符,后跟数字。
此模式不匹配空字符串,并且不需要额外的代码来检查我们是否匹配空字符串(例如 if (m.index === re.lastIndex) re.lastIndex++;
在anubhava的回答中,即使在该解决方案中,这也是多余的,这样您就可以避免连接捕获的组值)。
实际值存储在捕获组 1 中,该组位于正向前瞻内,以允许获得重叠匹配。由于如果我们使用 str.match(re)
,捕获就会丢失,因此我们必须在循环内依赖 RegExp#exec
。
var re = /(?=(.[0-9]))./g;
var str = 'a a4 bb4 c44c';
var res = [];
while((m=re.exec(str)) !== null) {
res.push(m[1]);
}
console.log(res);
关于javascript - 匹配数字之前的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38972622/