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
returntest
,否则不匹配任何内容
活示例:您可以使用此正则表达式,在
测试后可选匹配点,后跟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
应该可以工作