javascript - 如何使用 JavaSCript 进行惰性正则表达式 matchAll?
问题描述
我想检测job
并jobs
在一段文本中。所以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/
解决方案
实现 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; }
推荐阅读
- html - 为什么 IntelliJ 不能识别 svg 元素的 viewBox 属性?
- python - django 表单打印选择值
- c++ - CUDA 高效 nd-array(tensor) 切片
- python - 使用 python 从 HDF5 文件加载大型数据集
- android - Intent.putExtra(键,值)不起作用
- java - 将数据从片段传递到另一个片段。片段未附加到上下文
- javascript - 如何添加超过 1 个模态框?
- html - 如何让文本的两边对齐
- javascript - Meteor js,React 自定义图像重定向/meteor WebApp
- ios - 如何在 Swift 中删除部分的所有行