正则表达式匹配多行中的术语

时间:2016-09-13 16:39:24

标签: javascript regex

我一直在使用正面和负面的前瞻性正则表达式来匹配字符串中的出现次数,例如:

/^(?=.*term1)(?=.*term2)(?!.*term3).*$/

现在我有了一个新要求,可以跨多行匹配这些字符串。似乎m修饰符将匹配每行的这些术语,而不是我需要的那些。

我错过了什么吗?还有其他解决方案吗?

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式匹配Javascript中的各行:

/^(?=[^]*term1)(?=[^]*term2)(?![^]*term3)[^]*$/

在JS中,[^]匹配任何字符,包括换行符。

RegEx Demo

如果不使用JS或想要将此正则表达式移植到其他版本,那么可以使用:

/^(?=[\D\d]*term1)(?=[\D\d]*term2)(?![\D\d]*term3)[\D\d]*$/

答案 1 :(得分:-1)

尝试从正则表达式中删除“^”和“$”,例如

/(?=.*term1)(?=.*term2)(?!.*term3).*/

“^”表示行的开头,“$”表示行的结尾,因此这只会匹配一行。