Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要匹配可选字符序列的RegExp_Regex - Fatal编程技术网

要匹配可选字符序列的RegExp

要匹配可选字符序列的RegExp,regex,Regex,我有这类字符串(打开和关闭装饰器): 我正试图: 测试给定字符串是否与此模式匹配 剥掉这些“装饰品” 我尝试使用这两个RegExp: /-*\s*#*/g; /#*\s*-*/g 但问题是这些字符甚至可以匹配零个字符 仅当序列中至少存在两个#或--时,我如何告诉我的RegExp匹配 显然,我需要我的RegExp与整个decorator匹配(###-),而不仅仅是它的一部分。这样我就可以把它们从字符串中删除,只得到中间的标题( FoBar 或 Fo-Bar < /代码>) < p>可以使用这个正

我有这类字符串(打开和关闭装饰器):

我正试图:

  • 测试给定字符串是否与此模式匹配
  • 剥掉这些“装饰品”
  • 我尝试使用这两个RegExp:

    /-*\s*#*/g;
    /#*\s*-*/g
    
    但问题是这些字符甚至可以匹配零个字符

    仅当序列中至少存在两个
    #
    --
    时,我如何告诉我的RegExp匹配


    显然,我需要我的RegExp与整个decorator匹配(
    ###-
    ),而不仅仅是它的一部分。这样我就可以把它们从字符串中删除,只得到中间的标题(<代码> FoBar 或<代码> Fo-Bar < /代码>)

    < p>可以使用这个正则表达式:

    /\s*([#-])\1+\s*/g
    
    或者使用
    [\t]
    而不是
    \s
    仅匹配空格或制表符:

    [ \t]*([#-])\1+[ \t]*
    
    并在
    中使用相同的。替换
    以删除装饰器:

    ####--- foobar ---###
    ### -- foobar -- ###
    ####-- foobar ---##
    --- foobar ---
    ### foobar ##
    ### foo - bar ##
    
    str = str.replace(/[ \t]*([#-])\1+[ \t]*/g, '');
    

    正则表达式分解:

    • ([#-])
      :在组1中匹配并分组
      -
    • \1+
      \1
      是我们在第1组中捕获的内容的反向引用<代码>\1+
    我们匹配相同重复字符的1+字符
    你可以使用
    /([#-])\1+/g
    谢谢@anubhava,但它似乎与整个“装饰器”不匹配,只是它的第一部分(或者
    ###
    或者
    --
    ,而不是
    ###--
    )这样它将匹配两个组,而不匹配中间的空间。我的问题是如何1。测试字符串是否符合条件2。剥去装饰物(aka,匹配整个组)。几分钟前我也澄清了这一点,明确表示我想与整个装修师匹配。我希望问题现在更清楚。