微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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了解更多细节.

原文地址:https://www.jb51.cc/js/154796.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐