RegExp匹配可选字符序列

时间:2017-09-12 16:14:45

标签: regex

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

####--- foobar ---###
### -- foobar -- ###
####-- foobar ---##
--- foobar ---
### foobar ##
### foo - bar ##

我正在努力:

  1. 测试给定字符串是否与此模式匹配
  2. 剥去这些“装饰品”
  3. 我试过这两个RegExp:

    /-*\s*#*/g;
    /#*\s*-*/g
    

    但问题是那些甚至会匹配零个字符。

    如果序列中至少有两个##--,我怎么能告诉我的RegExp才匹配?

    我需要我的RegExp显然匹配整个装饰器(### ---)而不仅仅是它的一部分。这样我就可以从字符串中删除它们,只获得中间的标题(foobarfoo - bar

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

/\s*([#-])\1+\s*/g

或使用[ \t]代替\s来匹配空格或制表符:

[ \t]*([#-])\1+[ \t]*

并在.replace中使用它来删除装饰器:

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

RegEx Demo

RegEx分手:

  • ([#-]):在第1组中匹配并分组#-
  • \1+\1是我们在第1组中捕获的内容的反向引用。 \1+我们匹配相同重复字符的1个字符。