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