JS中的正则表达式及pattern的注意事项(2)

  另外,因为没有零宽后顾断言,不能判断某字符串的前面部分满足什么条件。但在JS中可以用多次正则表达式来实现:先匹配到要找的串,然后截取开头到index的字符子串,再匹配子串末尾是否符合需要的断言条件。具体用法可另外尝试一下。

match()与exec()的异同:

  match和exec是正则表达式匹配字符串的常用方法。两者实现的功能差不多,有些细微的区别:

  1、使用方式

  match是字符串包装对象的方法,用法:String.match(RegExp);
  exec是正则表达式对象的方法,用法:RegExp.exec(String);

  2、返回的结果

    当RegExp没有设置全局标志 "g" 时:

      两者的返回结果相同。即无匹配值时返回null,有匹配值时返回一个数组(令array)。array[0]为匹配的字符串,array[1]、array[2]……则对应为正则表达式中圆括号匹配的子字符串$1、$2……。同时数组带有两个属性,array.index表示匹配字符串的初始位置,array.input表示正在检索的字符串。

    当RegExp有设置全局标志 "g" 时:

      match在有值时返回一个数组array。数组的每项依次表示匹配到的所有的字符串,因此不再有圆括号匹配的子字符串了。此时数组没有index属性和input属性。

      exec则与没有全局标示 "g" 的表现无异。此时返回的是数组array,array[0]为当前匹配的字符串,array[1],array[2]……则为当前匹配下的圆括号匹配的字串。此时要注意RegExp对象的lastIndex属性,表示原字符串中匹配的字符串末尾的后一个位置。当没有进一步的匹配结果时,lastIndex属性置0。因此,可用lastIndex的循环找出所有的匹配字符串。来看看例子:

var str = 'I love1 my job22'; var reg = /\b[a-z]+(\d+)\b/g; array = str.match(reg); //array = ["love1", "job22"] //array.index = undefind //array.input = undefined ------------------------------------ array = reg.exec(str); //array = ["love1", "1"] //array.index = 2 //array.input = "I love1 my job22" //reg.lastIndex = 7 //run again reg.exec(str); //array = ["job22", "22"] //array.index = 11 //array.input = "I love1 my job22" //reg.lastIndex = 16 //run again reg.exec(str); //reg.lastIndex = 0

  最后,考虑到ECMAScript 3 和ECMAScript 5的版本区别,每次匹配完之后记得要手动将RegExp对象的lastIndex属性置0,以满足老非IE浏览器的要求。

js正则表达式,pattern,注意事项

一句话,请使用,/\w+@+\w+(\.+\w+){1,}/.test(str)  来验证,不要用"\w+@+\w+(\.+\w+){1,}".test(str) 来验证;
使用后者,直接,用add@dfddf 就可以通过验证了;

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjpfpy.html