javascript - 如何匹配所有内部星号且它们之间没有空格

标签 javascript regex

我想匹配 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*])?)\*

您想要的子字符串将在第一个捕获的组中。

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

关于javascript - 如何匹配所有内部星号且它们之间没有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53035945/

相关文章:

javascript - Firefox 上的正则表达式问题

python - 在html中查找dd.mm.yyyy

javascript - 将内容推送到 filter.js(jQuery 过滤脚本)

javascript - 如何访问Javascript对象中的窗口变量?

javascript - 如何使用 Bootstrap 打开模态中的所有链接

javascript - 如果字符数 =< 160,如何将初始 SMS 数显示为 1?

javascript - 如何从发送电子邮件中删除特定数据

java - 正则表达式正向查找正则表达式反向匹配的后面?

c - C 中的 sscanf 表达式 - 如何在最后一个斜杠后获取所有内容?

java - 正则表达式将SQL格式转换为java格式