[英]Match all character before numbers
我想对字符串中的数字进行操作,但是该操作取决于该数字之前的char,因此我需要在字符串中的任何数字之前获取char 。 请注意 ,数字前的char可以是另一个数字。
到目前为止,我已经完成了/(.)[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
此正则表达式匹配换行符和回车符( .
)以外的任何字符,该字符是除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);
您可以将此正则表达式与2个捕获的组一起使用:
/(.)(?=([0-9]))/g
并合并捕获的第1组和第2组以获取结果。
var re = /(.)(?=([0-9]))/g; var str = 'a a4 bb4 c44c'; var m; var results = []; while ((m = re.exec(str)) !== null) { if (m.index === re.lastIndex) re.lastIndex++; results.push(m[1] + m[2]); } console.log(results); //=> ["a4", "b4", "c4", "44"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.