首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数字之前匹配所有字符

在数字之前匹配所有字符
EN

Stack Overflow用户
提问于 2016-08-16 10:34:18
回答 2查看 77关注 0票数 2

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

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

代码语言:javascript
运行
复制
positions: 0123456789012
string:    a a4 bb4 c44c

比赛:

  1. a4 2-3
  2. b4 5-6
  3. c4 9-10

44 10-11不匹配

我怎么才能配得上这个呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-16 10:56:58

您可以使用一个简单得多的正则表达式:

代码语言:javascript
运行
复制
/(?=(.[0-9]))./g

regex演示

此正则表达式匹配除换行符和回车(.)以外的任何字符,后者是LF/CR以外的任何字符,后面跟着一个数字。

此模式与空字符串不匹配,并且不需要额外的代码来检查是否匹配空字符串(比如anubhava的答案中的if (m.index === re.lastIndex) re.lastIndex++;,即使在该解决方案中也是多余的,这样就可以避免连接捕获的组值)。

实际值存储在捕获组1中,该组位于正前瞻中,以允许获得重叠匹配。因为如果我们使用str.match(re),捕获就会丢失,所以我们必须依赖循环中的RegExp#exec

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2016-08-16 10:38:36

您可以对两个捕获的组使用此正则表达式:

代码语言:javascript
运行
复制
/(.)(?=([0-9]))/g

并将捕获的组#1和#2连接起来,以获得结果。

RegEx演示

代码语言:javascript
运行
复制
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"]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38972622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档