regex 如何在单个正则表达式中匹配完整的句子和该句子中的单词

hxzsmxv2  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(134)

所以我想在正则表达式中匹配两个东西,我的句子是:“I love白色cats”and I want 2 matches from that sentence first the whole sentence as“I love white cats”and second match I want is just word:“白色”
我试过很多正则表达式,但它们要么匹配“白色”,要么匹配“我爱白猫”,但不是两者都匹配,所以如果有人能帮助我进行正则表达式,那就太好了。

**编辑:**我想使用动态句子构建正则表达式,比如我将有一个句子数组,然后我必须构建正则表达式,所以数组将如下所示:

["I love white cats", "white cats", "something else"]

我想构建正则表达式,使它匹配完整的句子,也匹配其他句子或单词。示例是简单版本,因为原始代码复杂。
我尝试了如下的正则表达式:

const sentence = "I love white cats";
const regex = /(\bI love white cats\b|\bwhite cats\b)/gi;
const matches = sentence.match(regex);
console.log(matches);
jgovgodb

jgovgodb1#

您可以通过在lookahead中捕获组来实现类似于所描述的行为。

const sentence = "I love white cats";
const patterns = ["I love white cats", "white cats", "something else"];
const regex = new RegExp(
    '(?=(\\b' + patterns.join('\\b|\\b') + '\\b))',
    'gi');
console.log(regex);
const matches = Array.from(sentence.matchAll(regex), (m) => m[1]);
console.log(matches);

生成的正则表达式的演示可以看到here
注意:这个解决方案有一个警告。如果在你的patterns中有一个模式以另一个模式开始,那么只会找到一个(取决于数组中的序列)。
例如,模式["I love", "I love white cats"]将产生单个匹配I love

相关问题