1. var rule = /.../;
2. var rule = new RegExp();
今天突然发现的,用第一种方法定义的话,前后2次test的结果一次是true一次是false,用第2种定义2次都是true
貌似2种方法有个差异...
求解~~~~~~
谢谢!!!

解决方案 »

  1.   

    参见:快速掌握JavaScript正则表达式
    創建對象
        var r = new RegExp("表達式","ig");
        適合在動態構造匹配對象時使用;
        表達式中轉義符需要使用兩次,如\\d;
    直接量
        var r = /表達式/ig;
        使用在任何固定模式的匹配;
      

  2.   

    跟作用域没关系,一个正则表达式对象而已,怎么会跟作用域有关联呢
    当正则中需要用到变量时只能用第二种new RegExp("\b"+word+"\b")
    你说的有问题,把代码贴出来啊
      

  3.   

    两种正则的声明方式而已,没有本质区别var rule = new RegExp("Expression", "gmi"); 
    这种声明方式,可以用变量动态创建正则,但需要注意两点
    1、转义。以字符串形式声明正则,需要用\\表示转义符,否则会报错,比如RegExp("\\d+")表示匹配数字。当然,像\n、\t之类的是可以直接用的,但其中比较特殊的是\b,直接用\b表示退格符,而\\b表示单词边界比如RegExp("\bhello\b", "i")
    2、还是转义。当然,这里要说的转义是在动态创建正则表达式时,要对变量进行转义处理,否则变量中含有正则中的元字符,就会导致正则编译错误,比如RegExp("<" + tag + "[^>]*>")来匹配HTML标签时,如果tag变量的内容是"ab(cd"就会报错,所以在动态创建正则时,需要用escape函数对变量进行转义处理RegExp("<" + escape(tag) + "[^>]*>")var rule = /Expression/gmi; 
    这种正则声明方式中,是不需要对转义符进行特殊处理的,比如/\d+/表示匹配数字,这样正则就比较清晰了,当然,这样又多了一个需要转义的字符/,比如/<\/a>/表示匹配</a>标签,而上一种方式中,是不需要对/进行转义的。
    这种正则声明方式简洁,但不能通过变量动态创建正则
    你所说的一个结果为true,一个结果为false,应该是你的正则书写问题
      

  4.   


    两次结果不同可能由于你设了全局模式,然后呢由于lastindex这个属性改变了,所以导致一个是true,而后面的那个是false,发个传送门http://www.dovapour.com.cn/article/20090903200.html如果还不行,希望你把详细部分的代码贴出来看看.
      

  5.   

    如果加了g标识而多次调用一个正则实例的test或者是exec方法,应该手动把lastIndex属性设置为0var r = /\d/g;alert(r.test(1));
    alert(r.test(2));
    r.lastIndex = 0;
    alert(r.test(3));