26 正则表达式

RegExp

为什么
	匹配我们想要的字符串
是什么:
  匹配字符串的规则
怎么创建正则表达式	
  第一种方式是直接通过/正则表达式/写出来,
  第二种方式是通过new RegExp('正则表达式')创建一个RegExp对象
  var re1 = /ABC\-001/;
  var re2 = new RegExp('ABC\\-001');//因为字符串的转义问题,字符串的两个\\实际上是一个\,字符串中的反斜杠有特殊含义

  re.test('010-12345'); // true RegExp对象的test()方法用于测试给定的字符串是否符合条件。
要做更精确地匹配,可以用[]表示范围
  用逗号切分字符串
    'a,b;; c d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd'] \s表示空格 
  分组
    用()表示的就是要提取的分组(Group)
    如果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串来
    var re = /^(\d{3})-(\d{3,8})$/;
    re.exec('010-12345'); // ['010-12345', '010', '12345']
    exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。
    exec()方法在匹配失败时返回null

贪婪匹配
  正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符
  必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配


全局搜索
  为什么
    正常情况,正则只匹配一次,如果要匹配多次,需要用全局搜索
  怎么做到全局搜索
    最常用的是g,表示全局匹配
  var s = 'JavaScript, VBScript, JScript and ECMAScript';
  var re=/[a-zA-Z]+Script/g;

  // 使用全局匹配:
  re.exec(s); // ['JavaScript']
  re.lastIndex; // 10

  re.exec(s); // ['VBScript']
  re.lastIndex; // 20
    全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。
    当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引
    全局匹配类似搜索,因此不能使用/^...$/,那样只会最多匹配一次
    正则表达式还可以指定i标志,表示忽略大小写,m标志,表示执行多行匹配。

正则表达式
  regExp
    RegExp 对象有 3 个方法:test()、exec() 以及 compile()。
    var patt1=new RegExp("e");
    patt1.test("The best things in life are free")//test() 方法检索字符串中的指定值。返回值是 true 或 false。
    document.write(patt1.exec("The best things in life are free")); //exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

    var patt1=new RegExp("e");
    document.write(patt1.test("The best things in life are free"));
    patt1.compile("d");//compile() 方法用于改变 RegExp。compile() 既可以改变检索模式,也可以添加或删除第二个参数。
    document.write(patt1.test("The best things in life are free"));特殊元字符

   \d 0~9任意一个数字
  \D 非0~9之间的任意字符
  \w 字母、数字或下划线 [a-zA-Z0-9_]
  \W 非......
  \s 匹配任意一个空白字符 (包括制表符)
   \b 匹配边界符 "hello-world" 
  \n 匹配一个换行符
  \ 转义字符 \. 只表示一个小数点
  . 表示除了\n之外的任意字符
  ^ 以某个字符开头
  $ 以某个字符结尾
  a|b a或者b任意一个 
  [158] [abc] a或b或c任意一个
  [^abc] 除了a\b\c之外的
  [a-z] 表示a到z中任意一个字母 [0-9]等价于\d
  [^a-z]
  () 分组
  (?:) 当前分组只匹配不捕获

量词元字符
  *出现零到多次 等价于 {0,}
  ? 出现零到一次 等价于 {0,1}
  + 出现一次到多次 等价于 {1,}
  {m} 出现m次
   {m,} 出现至少m次
   {m,n} 出现m~n次 

* 修饰符 i ignoreCase 忽略大小写
* g global 全局匹配
* m multiline 多行匹配 
* 
*/


// 正则定义 var arr = [] 或var arr = new Array()
// 1 正则字面量 
var reg = /\d123/g;
console.log(typeof reg);
// 2 new创建
var reg2 = new RegExp("\\d","g");
console.log(reg2);

  

posted on 2019-01-14 16:58  悬剑  阅读(97)  评论(0编辑  收藏  举报

导航