我想制作一个String方法,该方法接受RegExp和回调,然后按RegExp拆分String,然后在拆分数组中插入回调的返回值。简而言之,它将执行以下操作:
"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];
}
...
}
仅在字符串不匹配时才应调用console.log reg
,对吗?但是有时候会记录下来(reg, that, true)
。那个麻烦的Stringreg
分别是:
"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。我不知道为什么。任何帮助将不胜感激。
这是由于Javascript RegEx引擎(ECMAScript3)中的错误所致
基本上,带有g
修饰符的正则表达式无法正确重置,因此多个test()
调用会在之间进行切换true and false
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句