繁体   English   中英

在数字前匹配所有字符

[英]Match all character before numbers

我想对字符串中的数字进行操作,但是该操作取决于该数字之前的char,因此我需要在字符串中的任何数字之前获取char 请注意 ,数字前的char可以是另一个数字。

到目前为止,我已经完成了/(.)[0-9]/g ,但这与在另一个数字之前有一个数字的情况不匹配。 例如:

positions: 0123456789012
string:    a a4 bb4 c44c

火柴:

  1. a4 [2-3]
  2. b4 [5-6]
  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM