在分隔符之间匹配内部文本

时间:2016-11-15 11:12:06

标签: regex

我正在尝试构建一个正则表达式,能够在起始和结束分隔符之间找到所有出现的文本,这可能是任何类型的字符序列(尽管我可以接受不起作用的解决方案非常特殊的分隔符组合。)

问题是,我不希望匹配的字符串包含任何分隔符的出现,例如将START和END作为分隔符和以下字符串:

  

START匹配END不匹配START棘手的一个(不应该匹配)START这是好结尾的事情

通常的方法将作为匹配返回"匹配"和"棘手的(不应该匹配)开始这很好",而我需要"匹配"和"这很好"匹配。

经过一些(很多次)尝试后,我能够生成以下表达式,该表达式捕获第一组中所需的字符串:

  

START((?:(?!START)。)*?)END

您可以在https://regex101.com/r/3IOb36/1

尝试

我担心的是,如果在每个角色上应用环视是一个太慢的方法,并且有更多表现的解决方案,我无法找到。

即使没有,我还是想分享我的解决方案,因为我在搜索过程中找不到另一个。

1 个答案:

答案 0 :(得分:0)

您可以使用否定预测,例如((?!START).)*,搜索两个标记之间不包含STARTEND的字符串。

以下是JavaScript中的示例匹配:

var text = "START match END not matched START tricky one (shouldn't match) START this is good END trailing things";

var regex = /START((?!START)(?!END).)*?END/g;
console.log(text.match(regex));