找到空间填充的星号对

时间:2017-05-17 01:33:37

标签: javascript regex markdown

我需要找到打破特定降价解析器的糟糕形成的降价。我正在寻找一个RegEx,它会找到**bold text**在星号之前或之后用空格填充错误的情况。例如,** this is wrong****this is also **** this one too **一样,但**this is correct**。当然,线条通常可以包含两者。例如,以下是一些测试用例:

This line is **correct** and **properly marked down**.
But this line **is not** because ** the second bold is wrong**.
** Also** this line is wrong **even though this is right**.

我已经尝试了(?:\*\*[^\*]*\s\*\*),但实际上它捕获了之间的部分(未包含在星号中的部分)。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

希望这会有所帮助,我们正在使用可能**spaces words spaces****words spaces****spaces words**

的组合

Regex demo

正则表达式: (?<=\s|^)(?:\*\*)(\s+([^\*]+)\s+|\s+([^\*]+)|([^\*]+)\s+)(?:\*\*)

  

1。 (?<=\s|^)正面看空格或开始字符串

     

2。 (?:\*\*)匹配**

     

3。 (\s+([^\*]+)\s+这将匹配space然后somewords然后space

     

4. \s+([^\*]+)匹配spaces,然后全部匹配*(不包括*

     

5. ([^\*]+)\s+)匹配某些字然后spaces

     

6。 (?:\*\*)匹配**

答案 1 :(得分:1)

试试这个:

(?:\*\*\S.+?\S\*\*|(\*\*(?:\s.+?|.+?\s)\*\*))

说明:

                                      // Line must contain:
(?:\*\*\S.+?\S\*\*|                   // Correctly formatted block OR
           (                          // block with BAD formatting - space
            \*\*(?:\s.+?|             //   to the left of formatting OR
                         .+?\s)\*\*   //   to the right of formatting
           )
)

Demo

答案 2 :(得分:0)

这是您需要的javascript友好模式:

^[^*]*(?:\*{2}[^ ][^*]*[^ ]\*{2}[^*\n]*)*(\*{2}(?: [^*]+|[^*]+ )\*{2}).*$

解释(偶然):

^[^*]*                                # match anything preceding the first *
(?:\*{2}[^ ][^*]*[^ ]\*{2}[^*\n]*)*   # match zero or more valid sets of **'s, so we don't lose track of what is an opener/closer
(?:\*{2}(?: [^*]+|[^*]+ )\*{2})       # REQUIRE just one invalid ** set
.*$                                   # after one invalid set is found, it doesn't matter what trails it before end of line

Regex Demo Link