JavaScript: The Definitive Guide 权威指南,读书笔记(二)

//  ======================================================================
//  第十章 正则表达式
//  ======================================================================
// 
//  RegExp对象 和 直接量
// 
//  正则表达式,就是能找到我的模式的字符串就会返回true,不管其他的字符是什么。
// 
//  特殊含义的标点符号:
//  ^ $ . * + ? = ! : | \ / () [] {}
// 
    var pattern = /s$/;  // 匹配所有s结尾的字符串
    pattern = new RegExp('s$');

    // Note: 如果记不清楚哪些标点符号需要用反斜杠转义,可以在每个标点符号之前都使用反斜杠。\

//  字符类 [] 和它包含的任意字符都匹配,如:[abc]  匹配"a","b","c"。匹配的是单个字符
//    [...]  位于括号之内的任意字符
//    [^...]  不在括号中的任意字符
// 
//    .     除 换行符 和其他Unicode行终止符之外的任意字符
//    \w    任何ASCII 单字字符,等价于[a-zA-Z0-9_]
//    \W    任何ASCII 非单字字符,等价于[^a-zA-Z0-9_]
//    \s    任何Unicode空白符
//    \S    任何非Unicode空白符,注意\w和\S不同
//    \d    任何ASCII 数字,等价于[0-9]
//    \D    除了ASCII数字之外的任何字符,等价于[^0-9]
//    [\b]  退格直接量
//   
//  重复
//    {n, m}    匹配前一项至少n次,但是不能超过m次
//    {n,}      匹配前一项n次,或更多次
//    {n}       匹配前一项恰好n次
//    ?         匹配前一项0次或1次,{0,1}
//    +         匹配前一项1次或多次。等价于{1,}   // 至少有一次
//    *         匹配前一项0次或多次。等价于{0,}  // 前一项有没有都匹配!!
//   
//    () 的作用之一: 把单独的项目组合成子表达式,以便像处理一个独立的单元那样用 | * + ? 来处理它们。
//   
//  正则表达式的选择、分组和引用字符
//    |         选择
//    (...)     组合,可以使用 | * + ?来处理它,而且可以被引用
//    (?:...)   只组合,不引用
//    \n        引用()中匹配的字符,它匹配的是字符,不是模式。忽略 (?: ),从左到右,数下左括号,不管嵌套不嵌套
//   
//  指定匹配的位置
// 
//  *正则表达式的锚字符
//  ^      匹配字符串的开头,在多行检索中,匹配一行的开头
//  $      匹配字符串的结尾,在多行检索中,匹配一行的结尾
//  \b     匹配一个词语的边界  [\b] 匹配的是退格符
//  \B     匹配不是边界
//  (?=p)  正向前声明,要求接下来的字符都与模式p匹配,但是不包括匹配中的那些字符
//  (?!p)  反向前声明,要求接下来的字符不与模式p匹配
// 
//  用于模式匹配的String方法
//  "JavaScript".search(/script/i);               // 返回4,第一次找到的字串位置。
//  "JavaScript".replace(/script/i, 'Bean');      // 返回JavaBean
//  "JavaScript".replace(/(script)/i, '$1Bean');  // 返回JavaScriptBean
//  "253dd234".match(/\d+([a-z]+)/);
//  "1,2, 3 , 4 ,5".split(/\s*,\s*/);             // 返回["1", "2", "3", "4", "5"]
// 
//  例子:
//  电子邮件地址的正则表达式分析。
// 
//  四个邮件提供商规则:
//   1. gmail.com:    使用字母,数字,句点。                 句点不能连续出现,不能出现在开头结尾。
//   2. hotmail.com:  使用字母,数字,句点,减号,下划线。   句点、减号、下划线可以一起出现(-_.)。只有句点不能连续出现且不能出现在开头结尾。
//   3. mail.163.com: 使用字母,数字,下划线。               下划线不能连续出现(不提示出错,提示已经被注册)且不能在开头结尾。
//   4. mail.qq.com:  使用字母,数字,句点,减号,下划线。   句点,减号,下划线不能连续出现且不能出现在开头结尾。
//  
//   所以我们需要验证的规则是:
//     *邮件名称*:
//         1. 可以包含字母、数字、句点、减号、下划线
//         2. 句点不能出现在开头结尾,不能连续出现
// 
//  域名注册规则:
//   可以使用:字母,数字,减号。减号可以连续,但是不能出现在头尾。
//   @右边部分:自定义部分.com.国家  // 自定义部分63个字符内, com 部分最长4位,如info, asia,国家部分 2位
//  
//  Email RegExp:
//  0). /^[\w-]+[\w-\.]+[\w-]@[a-zA-Z0-9-]{1,63}\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2})?$/
//       优点:兼容大部分的邮件地址了。
//       缺点:句点连续不能判断出来,请知道不吝赐教。
//       思考:{1,63}是否有必要,是不是会影响执行效率?
//       (个人猜想是要影响的,+,只要知道是1个以上就可以了;{1,63}还要判断是否超过63个)
//      
//       加个(),取出@左右两部分:
//      
//       /^([\w-]+[\w-\.]+[\w-])@([a-zA-Z0-9-]{1,63}\.[a-zA-Z]{2,4}(?:\.[a-zA-Z]{2})?)$/

你可能感兴趣的:(JavaScript: The Definitive Guide 权威指南,读书笔记(二))