如何使用JavaSCript进行惰性正则表达式匹配?

如何使用JavaSCript进行惰性正则表达式匹配?,javascript,regex,Javascript,Regex,我想在一段文本中检测作业和作业。所以就业报告出来了,这是一份很棒的工作应匹配作业两次和作业一次 如果我这样做: const res = str.matchAll(/job|jobs/gi) 然后它匹配作业一次和作业一次。我如何修改它以实现我的目标 更新 最后,我有很多类似于/job | jobs | get\sa\sjob/的东西,我不是一个JavaScript人,我不能让matchAll在这里的代码片段中工作,也不能在任何其他演示站点中工作。所以,我使用了一个老式的正则迭代器 对于一种解决方

我想在一段文本中检测
作业
作业
。所以
就业报告出来了,这是一份很棒的工作应匹配
作业
两次和
作业
一次

如果我这样做:

const res = str.matchAll(/job|jobs/gi)
然后它匹配
作业
一次和
作业
一次。我如何修改它以实现我的目标

更新
最后,我有很多类似于
/job | jobs | get\sa\sjob/
的东西,我不是一个JavaScript人,我不能让
matchAll
在这里的代码片段中工作,也不能在任何其他演示站点中工作。所以,我使用了一个老式的正则迭代器

对于一种解决方案,我们可以尝试匹配以下正则表达式模式:

\bjob(?=s|\b)|(?<=\bjob)s\b

您还可以通过使s可选来匹配一个或多个作业

然后循环数组,如果字符串等于jobs,则添加另一个job

let str=“就业报告出来了,这是一份很棒的工作!”;
常量res=str.match(/\bjobs?\b/gi);
res.forEach(s=>{
如果(s.toLowerCase()=“作业”){
res.push(“工作”);
}
});

控制台日志(res)实现OP结果的最简单的方法是将两个单独的正则表达式(这里是
'job'
的单数和复数变体)的每个匹配(ing)数组连在一起

const text='jobs报告出来了,这是一份很棒的工作!';
console.log(
text.match(/jobs/gi).concat(text.match(/job/gi))
);
console.log(
[…text.match(/jobs/gi),…text.match(/job/gi)]
);

.as控制台包装{min height:100%!important;top:0;}
您希望在此处获得什么确切输出?是否要使用
[作业,作业,作业]
的数组?还有什么吗?理想情况下,数组将是完美的。看起来最简单的事情是在匹配完成后将
作业
计数添加到
作业
计数。
str.match(/jobs?/gi).flatMap(m=>m.endsWith('s')?[m,m.slice(0,-1)]:m)
?。。。那么<代码>[…str.match(/jobs/gi),…str.match(/job/gi)]