Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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,我有下面的字符串 test test.a test.b test.a.b test2.a test2 test2.a.b 下面的正则表达式 /(test(\.)(\S*)?)/gi 这将返回以下test.atest.btest.a.b 我想要的是返回test 如果我将(\)?设置为可选,它也会返回test2.a,我不希望这样 我想要的是有一个条件。如果测试后有点,则返回test.whatever.elseelse如果testreturntest,否则不匹配任何内容 活示例:您可以使用此正则表

我有下面的字符串

test test.a test.b test.a.b test2.a test2 test2.a.b
下面的正则表达式

/(test(\.)(\S*)?)/gi
这将返回以下
test.a
test.b
test.a.b
我想要的是返回
test

如果我将
(\)?
设置为可选,它也会返回
test2.a
,我不希望这样

我想要的是有一个条件。如果测试后有点,则返回
test.whatever.else
else如果
test
return
test
,否则不匹配任何内容


活示例:

您可以使用此正则表达式,在
测试后可选匹配点,后跟1个或多个非空格字符,并在任一侧用单词边界进行包装:

/\btest(?:\.\S+)?\b/

您可以使用交替,以便
test
后面跟着一个点或空格,而不是让点成为可选的:

/test(?= )|(test(\.)(\S*)?)/gi

您也可以尝试添加\b以匹配单词结尾,例如:

/(测试(\.?\b)(\S*)?)/ig

。。。或积极的前瞻:


/(test?(?=[\.])(\S*)/ig

我认为这是一个非常好的答案,但我要指出的是
\b
单词边界将匹配一些其他字符,如连字符,因此这将匹配
测试foo
输入中的
测试。如果不需要,您可以使用
(\s |$)
(空格或字符串结尾)而不是
\b
,但我想这对于任何预期的输入是否确实必要/需要取决于OP。如果允许使用连字符或其他非单词字符,那么
/\btest(?\。\s+)(?=\s |$)/g
应该可以工作