如何在正则表达式中匹配空格,换行符

时间:2016-04-25 03:58:59

标签: javascript regex

字符串内容

<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

这与最后一个街区不匹配,我的注册表达中错过了什么。

3 个答案:

答案 0 :(得分:2)

(DOT)。匹配除换行符之外的任何字符,这就是最后一个字符串不匹配的原因。因此,您可以使用[\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]);
}

答案 1 :(得分:0)

尝试添加多行标记m

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

答案 2 :(得分:0)

试试这个

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

Regex demo

<强>解释
( … ):捕获小组sample
.:除了换行符sample之外的任何字符 +:一个或多个sample ?:一次或无sample
(?: … ):非捕获组sample
|:替代/或操作数sample
\s:&#34;空白字符&#34;:空格,制表符,换行符,回车符,垂直制表符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`