正则表达式?不工作
Regex ? does not work
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";
我不知道为什么。
关于@Sami的答案,这是完全正确的(你检查一个字符后面跟着一个回车/换行,在你的输入中从来没有发生过),它看起来更需要一个否定的断言,而不是匹配单个字符。@Sami提供使用向后看,直到你的问题标签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);
}
问题是您需要一个字符不是{
出现在'n
之前。在第一个有'r
,然后没有'r
,但'n
匹配,所以一切都很好。
在第二个中,你得到的第一个字符是'n
,然后没有'n
匹配,所以它失败了。
您可能想使用look behind来检查之前没有{
,而不是要求字符存在。这并不足以在适当的上下文中正确检查"use strict";
的存在,但对您来说可能已经足够了。
相关文章:
- javascript正则表达式验证未按预期工作
- Javascript正则表达式未按预期工作
- 如何让我的正则表达式代码在我的dojo cellWidget对象上工作
- 正则表达式未按预期工作 /(d).1/
- Javascript正则表达式在IE中失败,但在Chrome和Edge中工作
- FireFox插件sdk页面工作正则表达式
- 这个正则表达式不应该工作吗?
- javascript正则表达式,可以't让+表达式工作
- 如何让分组表达式和全局标志在 Javascript 正则表达式中同时工作
- 正则表达式不能用 .replace() 工作
- Javascript 正则表达式无法正常工作
- 正则表达式无法正常工作以识别 IE 版本
- 数据表正则表达式搜索无法按预期工作以实现完全匹配
- 这个正则表达式是如何工作的
- 为什么这个正则表达式不能按照我想要的方式工作
- 用于验证电子邮件无法正常工作的正则表达式
- 正则表达式在 javascript 中没有按预期工作
- 为什么我的正则表达式在 .NET 中工作,但在 Javascript 中不起作用
- 正则表达式无法正常工作
- 为什么这个JavaScript不能取代工作?(不包含正则表达式)