var contents = [];
contents.push('\r\n"use strict";');
contents.push('\n"use strict";');
var useStrictRegExp = /([^{]\r?\n)['"]use strict['"];/g;
for (var i = 0; i < contents.length; ++i) {
var content = contents[i];
console.log('before', content);
var replaced = content.replace(useStrictRegExp, '$1');
console.log('after', replaced);
}
这意味着匹配"use strict";
不在括号内。
但是在不使用Windows行结尾时似乎失败了。输出是:
before
"use strict";
after
before
"use strict";
after
"use strict";
我不知道为什么。
答案 0 :(得分:1)
问题是您需要在{
之前显示不\n
的字符。在第一个中有\r
,然后没有\r
但\n
匹配,所以一切都很好。
在第二个字符中,您获得第一个字符\n
,然后没有\n
匹配,因此它失败了。
您可能希望使用look look来检查之前是否存在{
,而不需要存在字符。这不足以在适当的上下文中正确检查"use strict";
的存在,但对您来说可能已经足够了。
答案 1 :(得分:1)
关于@Sami的答案,这是完全正确的(你检查一个字符后面跟一个回车/换行,并且在你的输入中从未发生),它看起来更需要一个否定的断言而不是匹配单个字符。 @Sami使用lookbehind提供,直到您的问号javascript,您只能使用前瞻:(?!{)
/((?!{)\r?\n)['"]use strict['"];/g
var contents = [];
contents.push('\r\n"use strict";');
contents.push('\n"use strict";');
contents.push('{\n"use strict";');
var useStrictRegExp = /((?!{)\r?\n)['"]use strict['"];/g;
for (var i = 0; i < contents.length; ++i) {
var content = contents[i];
console.log('before', content);
var replaced = content.replace(useStrictRegExp, '$1');
console.log('after', replaced);
}