如何匹配所有内部星号之间没有空格

时间:2018-10-28 20:49:01

标签: javascript regex

我想匹配两个星号之间的所有字符串,开头或结尾都没有空格,而且我也不想只匹配星号文本。

例如:

* text* //don't match
******** //don't match
*text * //don't match
* text * //don't match
*  text* //don't match
*text* //match
*Hello World !* //match

我尝试过:

(?<=\*)(?!\s)(.*?)(?!\s)(?=\*)

但是它只是在一开始就在空白处工作,如您所见:https://regex101.com/r/Hpe0br/3/

1 个答案:

答案 0 :(得分:2)

请使用否定的字符集代替否定的环顾四周:[^\s*]将匹配任何非空格字符或星号的字符。将其添加到起点和终点之间,就在前瞻性和前瞻性之间。另外,您可能不希望使用(.*?),因为.也会与*匹配:

(?<=\*)[^\s*](?:[^*]+[^\s*])?(?=\*)

https://regex101.com/r/Hpe0br/6

内部组(?:[^*]+[^\s*])?是可选的,以允许单字符匹配,例如*a*

还请注意,如果您使用的是Javascript,则lookbehind是一项非常新的功能-没有较旧的浏览器支持它,并且不可移植。您可能会考虑匹配 *,并捕获组中*之间的文本:

\*([^\s*](?:[^*]+[^\s*])?)\*

所需的子字符串将位于第一个捕获的组中。

https://regex101.com/r/Hpe0br/7