【问题标题】:regex to match terms in multiple lines正则表达式匹配多行中的术语
【发布时间】:2016-09-13 16:39:24
【问题描述】:

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

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

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

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

【问题讨论】:

  • JS 不使用全点。将点更改为[\S\s],它也匹配换行符。

标签: javascript regex


【解决方案1】:

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

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

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

RegEx Demo

如果不使用 JS 或者想让这个正则表达式移植到其他风格,那么可以使用:

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

【讨论】:

  • [^] 不太适合其他口味。
  • 还有其他选择吗?
  • 是的,它是 JS 特定的。 [\S\s] 或像 [\D\d] 这样的任何其他变体也适用于其他风格。
【解决方案2】:

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

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

“^”表示行首,“$”表示行尾,所以只会匹配一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多