javascript - 为什么语句 if ( !condition ) { console.log(condition) } 显示 true

标签 javascript regex

<分区>

我想创建一个 String 方法,它接受一个 RegExp 和一个回调,然后通过 RegExp 拆分 String,并将回调的返回插入拆分数组。简而言之,它会做这样的事情:

"a 1 b 2 c".method(/\d/, function ($1) { return $1 + 1; })
    => [a, 2, b, 3, c]

如果字符串与 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];
    }

    ...
}

只有当字符串不匹配 reg 时,才应该调用 console.log,对吗?但有时它会记录 (reg, that, true)。那个麻烦的 String 和 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

控制台记录为真。我不知道为什么。任何帮助将不胜感激。

最佳答案

这是 due to a bug in Javascript RegEx engine (ECMAScript3)

基本上带有 g 修饰符的正则表达式不会正确重置,因此多个 test() 调用会在 true 和 false 之间切换。

关于javascript - 为什么语句 if ( !condition ) { console.log(condition) } 显示 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21425401/

相关文章:

javascript - PHP/SQL 上的无效表名错误

javascript - 使用通配符字符串过滤数组中的搜索

c++ - 如何对特定的十进制模式进行模式匹配

javascript - 正则表达式选择两个字符串之间的所有内容,但不选择其中一个字符串

javascript - 如何使用 Javascript Regex 从字符串中获取数据

java - 如何在jSTL中使用正则表达式?

javascript - 命名空间混合 Vuejs

javascript - Angular javascript 页面编译但显示空白

Java 正则表达式子串

javascript - 在 javascript 中声明具有元素 1, 2, 3....n 的数组的最简单方法是什么