Javascript正则表达式:找到第一个'use strict'

时间:2016-11-09 07:32:21

标签: javascript regex

我想确定文件是以零或多行单行注释(//样式)开头,后跟“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,这意味着它无法识别我的评论。我怀疑我没有正确使用重复模式()*,但我不确定我应该使用什么?

1 个答案:

答案 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构造函数表示法,因为您的模式是静态的(没有变量用于构建正则表达式)。