javascript - 匹配数字之前的所有字符

标签 javascript regex

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

到目前为止,我已经完成了 /(.)[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

请参阅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/

相关文章:

javascript - yarn 注册表和 npm 注册表之间的区别

javascript - 过滤绑定(bind)到 knockout.js 模型中的可观察数组的用户 ListView

mysql - 返回正则表达式不匹配但不包含单词的记录

php - 使用 PHP 字符串将电子邮件替换为 Base64 编码的 ID

java - 为什么这个正则表达式在 Java 而不是 Groovy

javascript - D3.js enter() 破坏了 svg 形状动画,但更新并删除它们很好

JavaScript RegEX 显式字符仅匹配一次

javascript - 在Vue router中,为什么会出现这种情况呢? this$1.pending !== 路线

regex - 如何使用 sed 提取子字符串但仅在第一次出现?

Java 正则表达式替换为捕获组