gpt4 book ai didi

javascript - 正则表达式正在接受带有符号的单词

转载 作者:行者123 更新时间:2023-12-04 01:04:56 25 4
gpt4 key购买 nike

我有一种情况,我需要测试字符串是否包含 特定的单词或字母 使用 Javascript 正则表达式。

示例字符串为:

// In the first 3 strings, I need "C" letter to be checked in the string
C is language is required.
We need a C language dev.
Looking for a dev who knows C!

// Keyword is Artificial Intelligence
We need looking for someone who knows Artificial Intelligence.

为了检查上述内容,我创建了一个正则表达式。
['C', 'Artificial Intelligence', 'D', 'Angular', 'JS'].forEach((item) => {
const baseRex = /[!,.?": ]?/g;
const finalRex = new RegExp(baseRex.source + item + baseRex.source); // /[!,.?": ]<C/D/Angular...>[!,.?": ]/

// Say checking for first iteration only. So let consider 'C'.
console.log(finalRex.test('C is required')); // true
console.log(finalRex.test('Looking for a dev who knows C!')); // true
console.log(finalRex.test('We need a C language dev.')); // true
console.log(finalRex.test('Computer needed')); // Also returns true | Which is wrong!

});


我不希望包含字母 C 的单词也得到计数。

最佳答案

baseRex 连接后的正则表达式是:

[!,.?": ]?C[!,.?": ]?

请注意 [!,.?": ]?可以匹配 0 或 1 个字符。在 Computer , [!,.?": ]? 的两个子模式匹配 0 个字符和 C匹配 C ,导致整个正则表达式匹配。

据推测,您添加了 ?在那里,它可以在字符串的开头和结尾工作,那里没有要匹配的字符。但是,您应该改用 ^$代替开始和结束。你的整个正则表达式应该是:
(?:[!,.?": ]|^)C(?:[!,.?": ]|$)

您也可以将字符类替换为 \W , 这意味着 [^0-9a-zA-Z_] .

事实上,你实际上不需要做所有这些!有一个有用的 0 宽度匹配器,称为“字边界” \b ,这似乎正是您想要的。您的基本正则表达式可以是:
\b

它只匹配 \w 之间的边界。和 \W或在 \W 之间和 \w .

关于javascript - 正则表达式正在接受带有符号的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60201845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com