Javascript 匹配以特殊字符开头或结尾的整个单词
我需要一个javascript正则表达式来匹配以特殊字符开头或结尾的整个单词 这本来应该很容易,但由于某种原因,Javascript 匹配以特殊字符开头或结尾的整个单词,javascript,regex,Javascript,Regex,我需要一个javascript正则表达式来匹配以特殊字符开头或结尾的整个单词 这本来应该很容易,但由于某种原因,\b之后的?的行为并不像我预期的那样: > /FOO\?/.exec('FOO? ') [ 'FOO?', index: 0, input: 'FOO? ', groups: undefined ] > /FOO\?\b/.exec('FOO? ') null 我需要什么,例如,如果我的单词是“FOO?”(包括问号),我想匹配: “福?很酷”,“你觉得那福吗??” 但不是
\b
之后的?
的行为并不像我预期的那样:
> /FOO\?/.exec('FOO? ')
[ 'FOO?', index: 0, input: 'FOO? ', groups: undefined ]
> /FOO\?\b/.exec('FOO? ')
null
我需要什么,例如,如果我的单词是“FOO?”(包括问号),我想匹配:
“福?很酷”,“你觉得那福吗??”
但不是:“FOO很酷”,“FOO?很酷”,“aaFOO?很酷”
它也适用于以“?”开头的单词。例如,如果我的单词if“?FOO”,我想匹配:
“FOO很酷”,“我爱你”
但不是:“FOO很酷”,“FOO?很酷”,“aaFOO?很酷”
我希望这是有意义的。单词边界结构是不明确的。您需要使用明确的结构来确保匹配单词的左/右有非单词字符或字符串的开始/结束 你可以用
/(?:^|\W)\?FOO\?(?!\w)/g
这里,(?:^ |\W)
是一个非捕获组,它匹配字符串的开头或任何非单词字符、ASCII字母以外的字符、数字和(?!\w)
是一种负前瞻,如果在当前位置的右侧有一个单词char,则匹配失败
或者,使用ECMAScript 2018兼容的JS环境
/(?<!\w)\?FOO\?(?!\w)/g
使用/FOO\?(?!\w)/
@WiktorStribiż您的建议的问题是它与不需要的aaFOO?
匹配。因此,在之前添加一个单词边界,使用/\bFOO\(?!\w)/
(?:^ |w)FOO\(?!\w)/
@WiktorStribiż。但是如果我的单词以匹配的?
开头,例如?FOO
,则它不起作用。