我想匹配 2 个星号之间的所有字符串,开头或结尾没有空格,而且我不想只匹配星号文本。
例如:
* 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/
最佳答案
尝试使用否定字符集代替否定环视:[^\s*]
将匹配任何不是空格字符或星号的字符。将它添加到开头和结尾,就在后视和前视之间。此外,您可能不想要 (.*?)
,因为 .
也会意外地匹配 *
s:
(?<=\*)[^\s*](?:[^*]+[^\s*])?(?=\*)
https://regex101.com/r/Hpe0br/6
内部组 (?:[^*]+[^\s*])?
是可选的,以允许单字符匹配,如 *a*
.
另请注意,如果您使用的是 Javascript,lookbehind 是一项非常新的功能 - 旧版浏览器不支持它,而且它不可转换。您可能会考虑匹配 *
并捕获组中*
之间的文本:
\*([^\s*](?:[^*]+[^\s*])?)\*
您想要的子字符串将在第一个捕获的组中。
关于javascript - 如何匹配所有内部星号且它们之间没有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53035945/