JavaScript 正则表达式学习

一直想学习正则表达式,学习完之后想总结一下,发现我学习的很片面,总结的也只是部分,网上前辈总结的很多,也很全面,这里就记录一下我的学习记录吧,以便后面再学习,如有错误,请指正。

下面将直接贴出代码:

<script type="text/javascript">
        $(function(){

            // ***************************************************************************************//
            // test方法,测试字符串,符合模式时返回true,否则返回false
            // ***************************************************************************************//
            var re = /he/;        //含有 he 字符的
            //var re = new RegExp(/he/);
            var s = "he";
            //console.log(re.test(s)); //true
            //var s1 = "He";
            //console.log(re.test(s1)); //false

            //var re1 = /he/i;            //如果要大小写都匹配可以指定i标志(i是ignoreCase或case-insensitive的表示)
            //console.log(re1.test(s1)); //true

            s = "hi ,she is a pretty girl!";

            //console.log(re.test(s)); // true 

            //  ^
            re = /^he/            // 以he开头的字符串
            //console.log(re.test(s)); //false

            s = "he is a pretty girl!";
            //console.log(re.test(s)); //true

            s = "He is a pretty girl!";
            //console.log(re.test(s)); //false

            //console.log(/he/i.test(s)); //忽略大小写 

            // $
            re = /he$/i;   //$表示字符结束位置 /he$/i 表示忽略大小写且以he结尾 

            //console.log(re.test("he is")); //false

            //console.log(re.test("he")); //true

            //console.log(re.test("he ")); //false

            //console.log(re.test("rHE"));//true

            // \s

            re = /\s/; //\s匹配任何空白字符,包括空格、制表符、换页符等等
            s = "she is";
            //console.log(re.test(s));//true
            //console.log(re.test("sheis")); //false
            //console.log(re.test("she    is"));//true  中间是制表符 tab键

            re = /[a-z]/ ;//[]匹配指定范围内的任意字符,这里将匹配英文字母
            s = "beauty";
            //console.log(re.test(s));//true

            //console.log(re.test("Beauty")); //true

            re = /^[a-z]/ ;//匹配a-z的字母,这里是小写字母,必须是开头
            //console.log(re.test("Beauty")); //false

            re = /^[a-z]/i;  //不区分大小写,以字母开头
            //console.log(re.test("beauty")); //true
            //console.log(re.test("Beauty")); //true
            //console.log(re.test("12Beauty"));//false

            re = /[A-Z]/;  //匹配A-Z的字母,这里是大写字母
            //console.log(re.test("abc"));//false
            //console.log(re.test("Abc"));//true

            re = /[A-Z]/i

            //console.log(re.test("12Bs")); //true

            re = /^[A-Z]/i
            //console.log(re.test("12Bs"));//false

            //console.log(re.test("Ab12c4")); //true

            re = /\d/;   //匹配数字 0-9,字符串中含有数字即可
            //console.log(re.test("sdf")); //false
            //console.log(re.test("1223")); //true
            //console.log(re.test("12w12ew")); //true

            re = /^[a-z]+\s+\d+$/i ; //表示 以小写字母开头,\s表示空格 ,\d 表示 数字,+ 表示至少出现一次,i 表示忽略大小写
            s = "jdk 7";
            //console.log(re.test(s));//true

            // ***************************************************************************************//
            // 另一个方法exec,返回一个数组,数组的第一个元素为完整的匹配内容
            // 注意,当字符串不匹配re时,exec方法将返回null
            // ***************************************************************************************//
            var arr = re.exec(s);
            //console.log(arr.length); // 1
            //console.log(arr[0]); // jdk 7

            re = /\d/; //输出是那个字符匹配了正则的模式
            var arr = re.exec(s);
            //console.log(arr.length); // 1
            //console.log(arr[0]); // 7

            s = "jdk 7 8";
            arr = re.exec(s);
            //console.log(arr.length); //1
            //console.log(arr[0]); // 7 这里还是7,其实我想把数字都输出,怎么玩?

            re = /^[a-z]+\s+(\d+)$/i;
            s = "jdk 7";

            arr = re.exec(s);
            //console.log(arr.length); // 2
            //console.log(arr[0]); // jdk 7
            //console.log(arr[1]); // 7

            re = /^[a-z]+\s+(\d+)\.(\d+)$/i; // 这里要说明的是 \. 是什么意思, .在正则里是元字符之一,要使用.的本意, 需要转译才可使用,正则里有那些元字符? ( [ { \ ^ $ | ) ? * + .
            s = "jdk 7.8";
            arr = re.exec(s);
            //console.log(arr.length); //3
            //console.log(arr[0]); // jdk 7.8
            //console.log(arr[1]); // 7
            //console.log(arr[2]); // 8

            re = /^[a-z]+\s+(\d+)+\s+(\d+)$/i; //这里就解决了上面的那个问题 ^_^!
            s = "jdk 7 8";
            arr = re.exec(s);
            //console.log(arr.length);// 3
            //console.log(arr[0]); // jdk 7 8
            //console.log(arr[1]); // 7
            //console.log(arr[2]); // 8

            // ***************************************************************************************//
            // 关于字符串的操作
            // 1、s.replace(regexp, replaceValue) 第一个参数 可以是正则表达式 第二个参数是被替换的字符        //
            // ***************************************************************************************//

            s = "some thing";
            re = /\s/;
            //console.log(s.replace(re, "-")); //some-thing
            //console.log(s.replace(re,"")); //something

            s = "some  thing is"; //里面有两个空格
            re = /\s+/;
            //console.log(s.replace(re, "*")); //some*thing is

            re = /\s+/g;   // g 是什么意思? g是全局标志,将使正则表达式匹配整个字符串
            //console.log(s.replace(re, "*")); //some*thing*is

            s = "some thing is";
            re = /\s/;
            //console.log(s.split(re)); // ["some", "thing", "is"]

            s = "ab+c_s-d";
            re = /[^a-z]/i;  //注意这里的 [^a-z]与^[a-z]的区别
            //console.log(s.split(re)); //["ab", "c", "s", "d"]

            s = "ab+c_s-d+ABc+Sb";
            //console.log(s.split(re));  //["ab", "c", "s", "d", "ABc", "Sb"]

            s = "ab+c_s-d+ABc+Sb*ds&012%e";
            //console.log(s.split(re));    //["ab", "c", "s", "d", "ABc", "Sb", "ds", "", "", "", "", "e"]
            //上面三组比较有意思,看出来区别了 ,^[a-z] 表示的是 以a-z字母开头 [^a-z] 表示取 a-z的补集 ,前辈说是表示一个负字符集,什么是负字符集? 

            //search(regexp) 返回查找到的字符串开始下标  当search方法没有找到匹配时,将返回-1
            s = "jdk 7";
            re = /\d+/;
            //console.log(s.search(re)); // 4
            s = "jdk 7";
            re = /\d+/g;  //
            //console.log(s.search(re)); // 4 ,我感觉g标志是多余的

            //match()
            s = "My name IS JAck!";
            re = /[A-Z]/;
            arr = s.match(re);
            //console.log(arr.length);  // 1
            //console.log(arr[0]); //M

            re = /[A-Z]/g;
            arr = s.match(re);
            //console.log(arr.length);  // 5
            //console.log(arr);   //["M", "I", "S", "J", "A"]

            re = /[a-z]/i; //将[a-z]字符串输出
            //console.log(re.source);

            re = /\d/;
            //console.log(re.source);

            //s = "aghf12";
            //console.log(re.test(s));

            re = /\w/;
            s = "*12**";
            //console.log(re.test(s));

            var html = "<p><a href=‘http://www.cnblogs.com/rubylouvre/‘>Ruby Louvre</a>by <em>司徒正美</em></p>";
            //var text = html.replace(/<(?:.|\s)*?>/g, "");
            //alert(text)
            re = /<[^<>]+>/g; // 除去 标签,获取标签内的内容 

            //alert(html.replace(re,‘‘));  //Ruby Louvre  司徒正美

            s = "[email protected]";
            //验证邮箱,首先@前是由字母、数字、下划线组成,@后是数字、字母,然后. .后是cn或者com等,必须是字母,且位数2到4为
            re = /^\[email protected][0-9a-z]+\.[a-z]{2,4}$/;
            // 注意这里的行首^ 行尾$   ^在[]外表示行首,在[]内表示非,交集
            //alert(s+" : "+re.test(s));

            s = "13538205813";
            // 手机号 第一位是1,这个是必须的,第二位 有 3、5、8,就这三个数字,第三位到第十一位0-9,共十一位
            re = /^1[358]\d{9}$/g;

            // 注意这里{},{9}表示长度是9,\d{9}表示数字的长度必须是9,也就是有9个数字
            // 刚才写成这个样子,\d+{9},然后报了错,
            // +号是什么意思呢? 其实 + 可以写成{1,} 表示出现1次或者任意次
            // {9} 表示 出现的次数是9,也就是长度是9
            // {9,} 表示 出现的次数字是9,没有上限的次数  >=9
            // { ,9} 表示 出现的次数对多是9,没有下限 <=9
            // * 可以写成{0,},表示任意次,出现的次数任意
            // ? 可以写成{0,1} ,表示出现的次数是0次或者1次
            // 正则报错是不给提示的,所以谨记 

            //alert(re.test(s));

            s = "359864900";
            // QQ 号码 共5到12位,第一位不能为0,剩下的几位为0-9任意数字
            re = /^[1-9]\d{4,11}$/;
            //alert(re.test(s));

            s = "你好说的dsdsd";
            re = /[\u4e00-\u9fa5]+/g;
            // 校验 字符串中是否含有中文
            // re = /[\u4e00-\u9fa5]/  用于匹配单个汉字。
            // utf-8编码 u4e00 是utf-8编码顺序中的第一个汉字,u9fa5表示最后一个汉字
            //alert(re.test(s));  [^\u4e00-\u9fa5]

            s = "  [a b c]  ";
            re = /\s+/g; //去掉所有空格 

            //alert(s.replace(re,‘‘)); //abc

            re = /^\s+/g; //去掉前面的空格
            //alert(s.replace(re,‘‘)); //a b c

            re  = /\s*$/g;
            //alert(s.replace(re,‘‘))            

            re = /^\s*|\s*$/g;

            alert(s.replace(re,‘‘));

            // ***************************** 小结 **********************************************************//
            // 正则表达式 基本都是perl方式。
            // var re = /he/;  等价于  var re = new RegExp(/he/); 习惯使用前者的写法
            //
            //.   任意字符,表示什么都可以表示,数字、字母、空格等
            // \d [0-9]digital 数字
            // \D [^0-9]除了0-9
            // \w word 表示[0-9a-z_]
            // \W [^0-9a-z_]
            // \s space 表示空格 空白
            // \S 表示除了空格空白之外的所有东西
            // g global 全局  i ignore 忽略大小写  平时的写法可以 gi 或者 ig
            // search(re) 字符串搜索,返回匹配的出现的位置
            // match(re) 获取匹配的项目,如找出所有数字
            // test("abc") 根据正则匹配,看是否符合 匹配规则 符合 true 否则 false
            //    ( [ { \ ^ $ | ) ? * + .   正则的元字符
            // [] |就是或的意思,和 []意思一样,凡是出现在[]中的都是或的范围之内的
            // (1|2|3|4) 可以写为[1234]
            // 区分 ^[0-9] 与 [^0-9] 前者表示 以数字0-9开头,后者表示 以除了0-9任意字符开头
            // ^ 与 $ 前者表示以此开头,后者表示以此结尾
            // ***************************************************************************************//
        });

    </script>

参考资料:

  JavaScript正则表达式

  精通 JavaScript中的正则表达式

时间: 2024-12-18 06:38:23

JavaScript 正则表达式学习的相关文章

JavaScript正则表达式学习笔记之一 - 理论基础

自从年前得空写了两篇文章之后就开始忙了,这一忙就是2个月??.当时信誓旦旦说的定期写篇博客的计划也就泡汤了??,不过好在最近有空,顺便总结一下这两个月遇到的几个问题.第一个问题就是项目中用到了一些正则才发现之前被自己忽略的正则是时候补一补了.恰逢今天周六??,就把自己学习JavaScript正则表达式的笔记整理成文,写了这篇关于正则表达式理论基础的文章,希望本文能对有需要的同学提供帮助.号外:本文相对基础,大神请忽略??. 一. 基本概念 正则表达式是用于匹配字符串中字符组合的模式. 一种几乎可

JavaScript正则表达式-学习笔记(不定期更新)

JavaScript权威指南学习笔记,禁止转载! 8.正则表达式 在常见的字符串检索或替换中,我们需要提供一种模式表示检索或替换的规则. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 使用: /\d\d\d/.test("123");  //true new RegExp("Bosn").test("Hi,Bosn");  //true 正则基础: . 任何字符(除换行符以外) /-/.test('[email prote

php、linux、javascript 正则表达式学习基础总结

正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 文章来源于作者个人空间http://www.ilovehai.com PHP 正则表达式中包含三种元素分别为:量词.元字符.修饰符量词 语法                    描述+      

正则表达式学习-JavaScript RegExp 对象

W3School 中有关于正则表达式的全面介绍:http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp 1.什么是正则表达式?正则表达式有什么用? 知道正则表达式有什么用,是学习它的最好动力. 正则表达式跟平时用的字符串操作功能函数类似.功能比它强大很多. 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过

javascript的正则表达式学习

关于反向引用 复制代码 代码如下: // 测试函数 function matchReg(reg, str) { var result = str.match(reg); if(result) { console.dir(result); } else { console.log('match failed'); } } var reg = /([A-Za-z]{0,6})\1/; var str = 'AndrewAndrew'; // 测试通过 matchReg(reg, str); //通过

Java学习总计(二十六)——JavaScript正则表达式,Js表单验证,原生js+css页面时钟

一.JavaScript正则表达式1.exec检索字符串中指定的值,返回找到的值,并确定其位置2.test检索字符串中指定的值,返回true或false3.正则表达式对象的创建:(1)方式一:Var rgex=new RegExp("[0-9]","模式");(2)方式二:简便写法,用双斜杠//把正则表达式的内容括起来例1(正则创建,使用test()方法): <!DOCTYPE html> <html> <head> <me

正则表达式学习(一)

正则表达式到底是什么东西? 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?.如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc.在这里,*会被解释成任意的字符串.和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求--当然,代价就是更复

[转载] 几张非常有意义的JavaScript基础学习思维图

原文:http://www.w3cfuns.com/forum.php?mod=viewthread&tid=5598364&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26digest%3D1 1.JavaScript 数组 2.JavaScript 函数基础 3.Javascript 运算符 4.JavaScript 流程控制 5.JavaScript 正则表达式 6.JavaScript 字符串函数 7.JavaScript 数据类型

【转载】正则表达式学习 &amp; ASCII码表

文章原地址: http://www.jb51.net/tools/zhengze.html <正则表达式30分钟入门教程> 其中有几个地方可以有笔记: \s 匹配任意的空白符 \b 匹配单词的开始或结束 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 \S 匹配任意不是空白符的字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符 捕获(exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为na