gpt4 book ai didi

javascript - 匹配以特殊字符开头或结尾的整个单词

转载 作者:行者123 更新时间:2023-11-30 14:24:08 24 4
gpt4 key购买 nike

我需要 javascript 中的正则表达式来匹配以特殊字符开头或结尾的整个单词?

这本来应该很容易,但由于某些原因 \b? 之后没有像我预期的那样运行:

> /FOO\?/.exec('FOO? ')
[ 'FOO?', index: 0, input: 'FOO? ', groups: undefined ]
> /FOO\?\b/.exec('FOO? ')
null

我需要什么,例如,如果我的单词是“FOO?” (包括问号),我要匹配:

“FOO?很酷”,“你认为 FOO 吗??”

但不是:“FOO 很酷”、“FOO?很酷”、“aaFOO?很酷”

它也适用于以“?”开头的单词。例如,如果我的单词 if "?FOO",我想匹配:

“?FOO 很酷”,“我喜欢?FOO”

但不是:“FOO 很酷”、“FOO?很酷”、“aaFOO?很酷”

我希望这是有道理的。

最佳答案

\b单词边界结构不明确。您需要使用明确的结构来确保在匹配的单词的左侧/右侧有非单词字符或字符串的开头/结尾。

你可以使用

/(?:^|\W)\?FOO\?(?!\w)/g

在这里,(?:^|\W)是一个非捕获组,它匹配字符串的开头或任何非单词字符、除 ASCII 字母、数字和 _ 之外的字符。 . (?!\w)是一个否定前瞻,如果紧挨着当前位置的右侧有一个单词 char,则匹配失败。

或者,使用 ECMAScript 2018 兼容的 JS 环境,

/(?<!\w)\?FOO\?(?!\w)/g

参见 this regex demo .

(?<!\w)如果当前位置的左侧紧邻有一个单词 char,则它是一个否定后视,它会导致匹配失败。

在代码中,您可以直接使用 String#match提取所有事件,例如 s.match(/(?<!\w)\?FOO\?(?!\w)/g) .

第一个表达式需要一个围绕您需要提取的单词的捕获组:

var strs = ["?FOO is cool", "I love ?FOO", "FOO is cool", "FOO?is cool", "aaFOO?is cool"];
var rx = /(?:^|\W)(\?FOO)(?!\w)/g;
for (var s of strs) {
var res = [], m;
while (m=rx.exec(s)) {
res.push(m[1]);
}
console.log(s, "=>", res);
}

关于javascript - 匹配以特殊字符开头或结尾的整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52212874/

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