首页 > 解决方案 > 如何使用 JavaSCript 进行惰性正则表达式 matchAll?

问题描述

我想检测jobjobs在一段文本中。所以The jobs report came out and it was a great job!应该匹配job两次和jobs一次。

如果我做:

const res = str.matchAll(/job|jobs/gi)

然后它jobs一次job又一次地匹配。我怎样才能修改它来做我想做的事?

更新 最终,我有很多喜欢/job|jobs|get\sa\sjob/

标签: javascriptregex

解决方案


实现 OP 结果的最天真的方法是连接两个单独的正则表达式的每个 match(ing) 数组(这里是 的单数和复数变体'job')......

const text = 'The jobs report came out and it was a great JOB!';

console.log(
  text.match(/jobs/gi).concat(text.match(/job/gi))
);
console.log(
  [...text.match(/jobs/gi), ...text.match(/job/gi)]
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

如果一个人还想考虑单词边界,就像其他答案所做的那样,一个人必须改变例如上述第一种方法的第二个例子......

const text = 'The jobs report came out and it was a great NUTJOB of a JOB!';

// does not take word boundaries into account ...
console.log(
  [...text.match(/jobs/gi), ...text.match(/job/gi)]
);

// ... changed in order to support word boundaries.
console.log([
  ...text.match(/\bjobs\b/gi),
  ...[...text.matchAll(/\b(job)s?\b/gi)].map(([match, $1]) => $1)
]);
.as-console-wrapper { min-height: 100%!important; top: 0; }


推荐阅读