0

String 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>

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]);
}

Output

a.css
BOWER/jquery
/build/bundle

It's not match the last block, what miss in my reg expression.

user1434702
  • 817
  • 1
  • 14
  • 33

3 Answers3

4

(Dot). Matches any character except newline , that's why the last string is not matching. So you can use something like [\s\S]* or [^] for matching any character. ( Ref : 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]);
}
Community
  • 1
  • 1
Pranav C Balan
  • 113,687
  • 23
  • 165
  • 188
0

Try adding multiline flag (m)

/<!--[\s\t\n]*?@require ([\s\S]+?)[\s\t\n]*?-->/gm
Aminah Nuraini
  • 18,120
  • 8
  • 90
  • 108
0

Try this

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

Regex demo

Explanation:
( … ): Capturing group sample
.: Any character except line break sample
+: One or more sample
?: Once or none sample
(?: … ): Non-capturing group sample
|: Alternation / OR operand sample
\s: "whitespace character": space, tab, newline, carriage return, vertical tab sample

Output:

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`  
Tim007
  • 2,557
  • 1
  • 11
  • 20