参见英文答案 >
What is wrong with my date regex? 2
我想制作一个String方法,它接受一个RegExp和一个回调,然后用RegExp分割String,并在split数组中插入回调函数.总之,它会做这样的事情:
我想制作一个String方法,它接受一个RegExp和一个回调,然后用RegExp分割String,并在split数组中插入回调函数.总之,它会做这样的事情:
"a 1 b 2 c".method(/\d/,function ($1) { return $1 + 1; }) => [a,2,b,3,c]
如果String与RegExp不匹配,它应该返回一个数组,如下所示:
"a b c d e".method(/\d/,function ($1) { return $1 + 1; }) => ["a b c d e"]
我写了这段代码,但它没有像我想象的那样工作:
String.prototype.preserveSplitReg = function(reg,func) { var rtn = [],that = this.toString(); if (!reg.test(that)) { console.log(reg,that,reg.test(that)); return [that]; } ... }
只有当String不匹配reg时才应该调用console.log,对吧?但有时它会记录(reg,那是真的).那个麻烦的字符串和reg是:
"See <url>http://www.w3.org/TR/html5-diff/</url> for changed elements and attributes,as well as obsolete elements and" /<url>.*?<\/url>/g
控制台日志为true.我不知道为什么.任何帮助将高度赞赏.
解决方法
这是
due to a bug in Javascript RegEx engine (ECMAScript3)
基本上,使用g修饰符的正则表达式不能正确重置,所以多个test()调用在true和false之间切换.
>另见这个答案:https://stackoverflow.com/a/3827500/548225了解更多细节.