javascript - 如何匹配所有内部星号,它们之间没有空格
问题描述
我想匹配两个星号之间的所有字符串,在开头或结尾没有空格,我也不想只匹配星号文本。
例如:
* 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*](?:[^*]+[^\s*])?(?=\*)
https://regex101.com/r/Hpe0br/6
内部组(?:[^*]+[^\s*])?
是可选的,以允许单字符匹配,例如*a*
.
另请注意,如果您使用的是 Javascript,lookbehind 是一个相当新的功能 - 没有旧浏览器支持它,而且它不可转换。您可以考虑匹配*
s 并捕获组中 s 之间的文本*
:
\*([^\s*](?:[^*]+[^\s*])?)\*
您想要的子字符串将位于第一个捕获的组中。
推荐阅读
- kubernetes - Gitlab CI - 创建集群,运行 pod,在 pod 中运行应用程序,运行测试,然后删除集群
- python - 我的熊猫数据框中缺少数据。如何告诉 python 不要将其包含在新的数据框中?
- ojalgo - ojAlgo - 将 2x2 矩阵乘以 1x1 向量?
- google-cloud-sql - 如何从 Cloud Run 安全地连接到 Cloud SQL?
- linux - python socket io client emit 有一个意外的关键字参数“等待”
- fortran - ScaLAPACK 中的小矩阵:如何处理空块
- javascript - 在尝试在 Vue.js 中对它们执行任何操作之前,如何确保已加载我想要操作的 DOM 元素?
- botframework - MS Skype 机器人没有响应
- java - SHA512 的函数对不同的输入返回相同的结果
- ruby-on-rails - 在rails中存储另一个表格形式的值