【问题标题】:How to match space, newline in regexp [duplicate]如何在正则表达式中匹配空格,换行符[重复]
【发布时间】:2016-04-25 03:58:59
【问题描述】:

字符串内容

<head>
    <meta charset="UTF-8">
    <title></title>
    <!--@require a.css-->
    <!--@require BOWER/jquery-->
    <!--@require /build/bundle-->
    <!--
        @require bootstrap
        @require bootstrap.css
        @require bootstrap.font
    -->
</head>

JS

var content = ...;
var reg = /<!--[\s\t\n]*?@require (.+?)[\s\t\n]*?-->/g;
var r;
while((r = reg.exec(content)) != null) {
  console.log(r[1]);
}

输出

a.css
BOWER/jquery
/build/bundle

它与最后一个块不匹配,我的 reg 表达式中缺少什么。

【问题讨论】:

  • \s 匹配任何类型的空格,包括换行符。

标签: javascript regex


【解决方案1】:

(点)。匹配除 newline 以外的任何字符,这就是最后一个字符串不匹配的原因。所以你可以使用[\s\S]*[^] 之类的东西来匹配任何字符。 (参考:Matching multiline Patterns

var content = `<head>
    <meta charset="UTF-8">
    <title></title>
    <!--@require a.css-->
    <!--@require BOWER/jquery-->
    <!--@require /build/bundle-->
    <!--
        @require bootstrap
        @require bootstrap.css
        @require bootstrap.font
    -->
</head>`;
var reg = /<!--[\s\t\n]*?@require ([\s\S]+?)[\s\t\n]*?-->/g;
var r;
while ((r = reg.exec(content)) != null) {
  console.log(r[1]);
}

【讨论】:

    【解决方案2】:

    尝试添加多行标志 (m)

    /<!--[\s\t\n]*?@require ([\s\S]+?)[\s\t\n]*?-->/gm
    

    【讨论】:

      【解决方案3】:

      试试这个

      @require (.+?)?(?:-->|\s)
      

      Regex demo

      说明:
      ( … ):捕获组sample
      .:除换行符以外的任何字符sample
      +:一个或多个@ 987654324@
      ?:一次或一次sample
      (?: … ):非捕获组sample
      |:交替/或操作数sample
      \s: “空白字符”:空格、制表符、换行符、回车、垂直制表符sample

      输出:

      MATCH 1
      1.  [71-76] `a.css`
      MATCH 2
      1.  [97-109]    `BOWER/jquery`
      MATCH 3
      1.  [130-143]   `/build/bundle`
      MATCH 4
      1.  [173-182]   `bootstrap`
      MATCH 5
      1.  [200-213]   `bootstrap.css`
      MATCH 6
      1.  [231-245]   `bootstrap.font`  
      

      【讨论】:

        猜你喜欢
        • 2019-03-22
        • 2019-01-12
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多