Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配以特殊字符开头或结尾的整个单词_Javascript_Regex - Fatal编程技术网

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

Javascript 匹配以特殊字符开头或结尾的整个单词,javascript,regex,Javascript,Regex,我需要一个javascript正则表达式来匹配以特殊字符开头或结尾的整个单词 这本来应该很容易,但由于某种原因,\b之后的?的行为并不像我预期的那样: > /FOO\?/.exec('FOO? ') [ 'FOO?', index: 0, input: 'FOO? ', groups: undefined ] > /FOO\?\b/.exec('FOO? ') null 我需要什么,例如,如果我的单词是“FOO?”(包括问号),我想匹配: “福?很酷”,“你觉得那福吗??” 但不是

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

这本来应该很容易,但由于某种原因,
\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
,则它不起作用。