字符串内容
<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
这与最后一个街区不匹配,我的注册表达中错过了什么。
答案 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)
<强>解释强>
( … )
:捕获小组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`