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

How to match space, newline in regexp

本文关键字:空格 换行符 正则表达式      更新时间:2023-09-26

字符串内容

<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表达式中错过了什么。

(Dot)。匹配除换行符以外的任何字符,这就是最后一个字符串不匹配的原因。因此,您可以使用 ['s'S]*[^] 之类的东西来匹配任何字符。( 参考 : 匹配多线图案 )

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

尝试添加多行标志m

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

试试这个

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

正则表达式演示

解释:
( … ):捕获组样本
.:除换行符示例
以外的任何字符 +:一个或多个样品
? : 一次或无样品
(?: … ):非捕获组样本
| : 交替/OR操作数样本
's:"空格字符":空格、制表符、换行符、回车符、垂直制表符示例

输出:

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`