我正在尝试构建一个正则表达式,能够在起始和结束分隔符之间找到所有出现的文本,这可能是任何类型的字符序列(尽管我可以接受不起作用的解决方案非常特殊的分隔符组合。)
问题是,我不希望匹配的字符串包含任何分隔符的出现,例如将START和END作为分隔符和以下字符串:
START匹配END不匹配START棘手的一个(不应该匹配)START这是好结尾的事情
通常的方法将作为匹配返回"匹配"和"棘手的(不应该匹配)开始这很好",而我需要"匹配"和"这很好"匹配。
经过一些(很多次)尝试后,我能够生成以下表达式,该表达式捕获第一组中所需的字符串:
START((?:(?!START)。)*?)END
您可以在https://regex101.com/r/3IOb36/1
尝试我担心的是,如果在每个角色上应用环视是一个太慢的方法,并且有更多表现的解决方案,我无法找到。
即使没有,我还是想分享我的解决方案,因为我在搜索过程中找不到另一个。
答案 0 :(得分:0)
您可以使用否定预测,例如((?!START).)*
,搜索两个标记之间不包含START
和END
的字符串。
以下是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));