javascript – 为什么声明if(!condition){console.log(condition)}显示true

前端之家收集整理的这篇文章主要介绍了javascript – 为什么声明if(!condition){console.log(condition)}显示true前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > What is wrong with my date regex? 2
我想制作一个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了解更多细节.

猜你在找的JavaScript相关文章