我遇到了这样一种情况:我想从用户那里获得一个regexp,然后对几千个输入字符串运行它。在手册中,我发现RegExp
对象有一个.compile()
方法,用于在这种情况下加快速度。但是如果我已经在构造函数中传递了regexp字符串,为什么还要再次将它们传递给它呢?也许构造器会自己处理compile()
?
发布于 2009-05-19 20:12:09
RegExp().compile()
method is deprecated。它基本上与构造函数相同,我认为这就是它被弃用的原因。现在你应该只需要使用构造器。
换句话说,你以前可以这样做:
var regexp = new RegExp("pattern");
regexp.compile("new pattern");
但现在,它与简单的调用没有什么不同:
var regexp = new RegExp("pattern");
regexp = new RegExp("new pattern");
发布于 2011-03-09 02:32:50
而在Opera11中,运行RegExp.compile()
实际上会导致错误。
显然,当Opera“编译”正则表达式时,它会用正斜杠包装re.source
字符串(例如,re.source == "^(.)"
变成了"/^(.)/"
)。如果您手动编译正则表达式,Opera将无法识别这一事实,并继续进行编译(re.source
变为"//^(.)//"
)。每次编译都会产生一组额外的正斜杠,这会改变正则表达式的含义并导致错误。
发布于 2016-11-03 22:21:01
如果你使用的是/
,你必须先编译你的正则表达式才能使用它,试试这个:
var regex=new RegExp('/[a-zA-Z]/')
console.log("not compiled with escape /", regex.test("ciao") )
regex.compile()
console.log("compiled", regex.test("ciao") )
var regex=new RegExp('[a-zA-Z]')
console.log("not compiled, but no escape /", regex.test("ciao") )
https://stackoverflow.com/questions/884762
复制相似问题