我有这样一个需求,就是字符串中如果出现尖括号的话,必须成对的出现,而且尖括号里面必须有字母。
问题是:
我写的正则在JAVA中测试完全正常的,但是在JS中就不行,请教下为什么,要怎么改。下面是我的代码。
JAVA代码:
                  String str="jjjh<d>adsf<a>kk";
String str2="jjjh<ddsf<a>kk";
String reg="([^<>]*(<[a-zA-Z]+>)*[^<>]*)*";
boolean b = Pattern.matches(reg, str);
boolean b2 = Pattern.matches(reg, str2);
System.out.println(b);
System.out.println(b2);
结果为:true,false.
JS代码:
         
         var reg = /([^<>]*(<[a-zA-Z]+>)*[^<>]*)*/;
alert(reg.test("jjjh<d>adsf<a>kk"));
         alert(reg.test("jjjh<ddsf<a>kk"));
结果为:true,true在JAVA中和JS中的字符串和正则表达式都是一样的,为什么结果不同?请指教一下

解决方案 »

  1.   

    var reg = /^([^<>]*(<[a-zA-Z]+>)*[^<>]*)*$/;
      

  2.   


    var reg = /^([^<>]*(<[a-zA-Z]+>)*[^<>]*)*$/;
    //因为你的正则式没有声明是从字串首部开始匹配至尾部
    //js匹配"jjjh<ddsf<a>kk"的时候从ddsf<a>kk开始匹配,返回的就是true了
      

  3.   

    多谢二楼,确实可以了。
    不过我想问下,加上这个开始和结束符 和不加有什么区别?我看有的也没有用开始和结束符啊
    而且我一开始这样用new RegExp("([^<>]*(<[a-zA-Z]+>)*[^<>]*)*")这样怎么也不行呢