我想确定文件是以零或多行单行注释(//样式)开头,后跟“use strict”。
这是我的尝试:
var regex = new RegExp("(\/\/.*$)*\"use strict\";", 'm');
var codeblock =
`
//hi
//there
"use strict";
`;
let match = regex.exec(codeblock);
console.log(match.index);
我希望match.index为0.但实际上它返回14,这意味着它无法识别我的评论。我怀疑我没有正确使用重复模式()*,但我不确定我应该使用什么?
答案 0 :(得分:3)
关键是您的(\/\/.*\r?\n)*
部分与评论不符,因为您没有使用换行符,只能使用$
声明其存在。因此,组0值未定义(尝试打印match[1]
),匹配位于第14位,即"use strict"
。
将$
替换为\r?\n
并确保测试字符串开头没有换行符,您将获得0
:
var regex = /(\/\/.*\r?\n)*\"use strict\";/m;
var codeblock =
`//hi
//there
"use strict";`;
let match = regex.exec(codeblock);
console.log(match.index);
我还建议使用正则表达式文字符号 /(\/\/.*\r?\n)*\"use strict\";/m
而不是RegExp构造函数表示法,因为您的模式是静态的(没有变量用于构建正则表达式)。