javascript - 由正则表达式文字创建的 RegExp 对象共享一个实例?

标签 javascript regex

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
    <title>chap07</title>
    <script>
    function make_a_matcher(){
        return /a/gi;
    }

    var x = make_a_matcher();
    var y = make_a_matcher();

    x.lastIndex = 10;

    document.writeln('<div>x.global : '+x.global+'<div>');
    document.writeln('<div>x.ignoreCase : '+x.ignoreCase+'<div>');
    document.writeln('<div>x.lastIndex : '+x.lastIndex+'<div>');
    document.writeln('<div>x.multiline : '+x.multiline+'<div>');
    document.writeln('<div>x.source : '+x.source+'<div>');

    document.writeln('<div>y.global : '+y.global+'<div>');
    document.writeln('<div>y.ignoreCase : '+y.ignoreCase+'<div>');
    document.writeln('<div>y.lastIndex : '+y.lastIndex+'<div>');
    document.writeln('<div>y.multiline : '+y.multiline+'<div>');
    document.writeln('<div>y.source : '+y.source+'<div>');
    </script>
</head>
<body>
</body>
</html>

我正在通过 Douglas Crockford 编写的“JavaScript The Good Parts”学习 JavaScript。 他描述了由正则表达式文字构成的 RegExp 对象共享一个实例和以上示例。

书中的结果是y.lastIndex : 10。但我的结果是 y.lastIndex : 0

如果您能告诉我造成这种不同结果的确切原因,我将不胜感激。

最佳答案

Crockford 的信息不正确(或不是最新的),任何简单的测试都将验证您每次调用您的函数时是否获得了一个新的和不同的对象。

如果你想让它们返回同一个对象,你可以这样做:

var make_a_matcher = (function() {
    var regex = /a/gi;
    return function() {
        return regex;
    }
})();

演示:http://jsfiddle.net/jfriend00/FaDwP/

关于javascript - 由正则表达式文字创建的 RegExp 对象共享一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20231637/

相关文章:

javascript - Angular js $http 服务 :- header is not accessible inside catch block

.net - 正则表达式替换帮助

javascript - React fetch 返回未定义但在控制台中它返回数组

javascript - 搜索引擎索引 Javascript 标签

regex - Tcl 正则表达式 : Why '+' does not match as many as possible?

python - 使用 Python 拆分 ps 的输出

android - 验证 EditText 中的电子邮件

.net - 如何确保字符串包含不超过 3 个数字?

javascript - 检查谷歌地图中的位置变化

javascript - 贾勒特不工作