【问题标题】:How to match all inside asteriks without spaces between them如何匹配所有内部星号,它们之间没有空格
【发布时间】:2018-10-28 20:49:00
【问题描述】:

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

例如:

* 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/

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    不要使用否定的环视,而是尝试使用否定字符集:[^\s*] 将匹配任何不是空格字符或星号的字符。将其添加到开头和结尾,就在后视和前瞻之间。此外,您可能不想要(.*?),因为. 也会与*s 不匹配:

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

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

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

    另外请注意,如果您使用的是 Javascript,lookbehind 是一项相当新的功能 - 没有旧版浏览器支持它,而且它不可转译。您可以考虑匹配 *s 并在组中捕获 *s 之间的文本:

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

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

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

    【讨论】:

    • 如果星号之间有空格,是否可以匹配星号内的星号?喜欢:*t * t*.
    • 不要重复[^*],而是重复一个在` * `(由空格包围的星号)和[^*]之间交替的组。 regex101.com/r/Hpe0br/8
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-25
    • 2016-09-02
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多