jsp正则表达式

正则表达式

正则表达式是专门针对字符串而定义出来。
它是一组规则 通过特定的字符来表示不同的字符串类型

正则表达式的定义

  • 字面量定义 /正则表达式/修饰符
    • /\d+/g
  • 构造函数定义 RegExp(正则表达式, 修饰符);
    • new RegExp(“abc”, g)
      • 第一个参数是正则表达式的表达体
      • 第二个参数是正则表达式的修饰符
		// 正则表达式是专门针对字符串而定义出来
        // 它是一组规则 通过特定的字符来表示不同的字符串类型
        // 第一种 字面量 定义正则表达式
        // var reg = /sadfsadf/; 
        // 第二种 构造函数 定义正则表达式
        // var reg1 = new RegExp("sadfsadf");
        // console.log(reg == reg1); // false 因为它们是引用类型
// 检测字符串是否都是由字母a开头
// 正则表达式中的 边界符号
// ^表示开头 $表示结尾
		/* ^ */
        // var reg = /^a/;  // 这个正则表达式的含义:以a字母开头
        // var str = "abcdefg";
        // var str1 = "babb";

        // test方法
        // console.log(reg, str, reg.test(str)); // 判定str字符串是否符合reg的含义
        // console.log(reg, str1, reg.test(str1)); // 判定str1字符串是否符合reg的含义


        /* $ */
        // var reg = /com$/; // 该正则表达式的含义: 必须有c c后面必须是o o后面必须是m m必须是最后一个
        // var netStr = "www.baidu.com";
        // var netStr1 = "www.163.cn";
        // console.log(reg, netStr, reg.test(netStr));
        // console.log(reg, netStr1, reg.test(netStr1));

- 转义字符
    - \d 所有的数字
	        // d 在正则表达式中就表示d字母本身
	        // 但是 \d 表示的就不是d了 表示的是数字
	        // var reg = /^\d\d$/;
	        // console.log(reg.test(1))
	        // console.log(reg.test("1"))
	        // console.log(reg.test("11"))
	        // console.log(reg.test("a"))
    - \D 所有的非数字
    - \w 所有的数字字母下划线
	        // \w 表示的是数字字母下划线
	        // var reg = /^\w$/;
	        // console.log(reg.test("a"));
	        // console.log(reg.test("1"));
	        // console.log(reg.test("_"));
	        // console.log(reg.test("$"));

    - \W 所有的非数字字母下划线
    - \s 所有的空白符
		        // \s 在正则表达式中 表示所有的空白符
		        // var reg = /^\s$/;
		        // console.log(reg.test(" "));
		        // console.log(reg.test("  "));
    - \S 所有的非空白符
- 特殊字符(元字符)
    - . 除了回车和换行之外的其它所有内容
    - () 分组 分组内是一个整体
    - [] 范围 
        - [a-z]
        - [A-Z]
        - [0-9]
        - [0-9A-Za-z]
    - {} 数量
        - {10} 限定十个 不能多也不能少
        - {3,5} 最少三个 最多五个
        - {1,} 最少一个 最多无穷个
    - ? 零个或一个
    - + 一个或任意个
    - * 零个或任意个
    - | 或者

对于特殊字符的简单小例子

/* 元字符 */ 
        // 元字符表示在正则表达式中的特殊字符 它表示的不是它本身 而是其它含义
        // () [] {} ? * | ^ $ - + .
        // 针对以上的元字符 如果想要在正则表达式中 表达它们本身的含义 需要转移 \元字符

        // 定义一个字符串
        // var str = "^$";
        // var reg = /\^\$/;  
        // 此时 检测通过
        // console.log(reg.test(str));


        // ? 表示数量  0个或1个  针对前一个字符
        // var str = "abcd.html";
        // var str1 = "abcd.htm";
        // 定义正则表达式
        // var reg = /html?$/;  // 含义: 判定是否是以html 或者以htm结尾
        // console.log("通过" + reg + "规则 进行" + str + "的判定 结果是" + (reg.test(str)? "通过" : "不通过"));
        // console.log("通过" + reg + "规则 进行" + str1 + "的判定 结果是" + (reg.test(str1)? "通过" : "不通过"));

        // + 表示数量 1个或多个 针对前一个字符
        // var str = "abcccccccc";
        // var str1 = "abcccccccccccccccccccccccc";
        // var str2 = "abccccccccccccccccccccccccccccccccccccccccccccccccccccccccc";
        // var str3 = "ab";
        // var reg = /abc+/;  // 含义 包含a a后面是b b后面是至少1个c
        // console.log(reg.test(str));  // true
        // console.log(reg.test(str1));  // true
        // console.log(reg.test(str2)); // true
        // console.log(reg.test(str3)); // false


        // * 表示数量 任意个 针对前一个字符 
        // var str = "abcccccccc";
        // var str1 = "abcccccccccccccccccccccccc";
        // var str2 = "abccccccccccccccccccccccccccccccccccccccccccccccccccccccccc";
        // var str3 = "ab";
        // var reg = /abc*/;  // 含义 包含a a后面是b b后面是任意个c
        // console.log(reg.test(str));  // true
        // console.log(reg.test(str1));  // true
        // console.log(reg.test(str2)); // true
        // console.log(reg.test(str3)); // true


        // {} 表示数量 可以写两个数字 可以写一个数字
        // {数字} 表示前面的字符 必须出现多少个
        // {数字1,数字2} 表示前面的字符 必须至少出现数字1个 最多出现数字2个  
        // {数字1,} 表示前面的字符 必须出现数字1个 最多不进行限制  {0,}等价于*  {1,} 等价于+ {0,1} 等价于?


        // // 定义一串数字
        // var phoneNumber = "83554321233";
        // // 定义正则
        // var reg = /^\d{11}$/;  // 含义: 整个字符串必须是11个连续的数字 不能有其它
        // console.log(reg.test(phoneNumber))


        // var phoneNumber = "83554321233";
        // var phoneNumber1 = "1233";
        // // 定义正则表达式
        // var reg = /\d{3,11}/; // 含义: 字符串中必须包含 连续3位到连续11位之间的数字
        // console.log(reg.test(phoneNumber));
        // console.log(reg.test(phoneNumber1));

        // 定义一串数字
        // var phoneNumber = "1234";
        // var phoneNumber1 = "1234567899999999999999999999999999999999999999999999999999999999999999999999";
        // var str = "abc11def22ghi333";
        // var reg = /\d{4,}/; // 含义: 字符串中必须包含至少连续四个数字 多了不限制

        // console.log(reg.test(phoneNumber)); // true
        // console.log(reg.test(phoneNumber1)); // trye
        // console.log(reg.test(str)); // false


        // () 表示分组 
        // ac.d.ghi.hjk.xxx
        // a.def.g.hjk
        // ab.df.g
        // c.def.k.l.o.ps
        // A.def.k.l.o.ps
        // B.def.I.l.E.ps
        // G

        // 判定字符串是否是以上格式
        // 总结规律: 开头必须是英文 后面的内容只要出现 必须是以.出现  .后面跟的也是英文  如果不出现 .也没有 英文也没有
        // var reg = /\w+(\.\w+){0,}/; // 含义:字符串中包含 英文字母 后面跟的是 .英文字母这种格式的内容 这种格式的内容可以出现任意次
        // console.log(reg.test("ac.d.ghi.hjk.xxx"));
        // console.log(reg.test("a.def.g.hjk"));
        // console.log(reg.test("ab.df.g"));
        // console.log(reg.test("c.def.k.l.o.ps"));
        // console.log(reg.test("A.def.k.l.o.ps"));
        // console.log(reg.test("B.def.I.l.E.ps"));
        // console.log(reg.test("G"));


        // [] 表示一个区间 表示一个字符 该字符可以是这个区间中的任何一个

        // 判定一个字母是否在a到h之间 
        // var reg = /^[a-h]$/; // 含义 检测一个字母 该字母必须在a~h之间 
        // console.log(reg.test("a"));
        // console.log(reg.test("b"));
        // console.log(reg.test("c"));
        // console.log(reg.test("d"));
        // console.log(reg.test("e"));
        // console.log(reg.test("f"));
        // console.log(reg.test("g"));
        // console.log(reg.test("h"));
        // console.log(reg.test("i"));
        // 判定数字和字母
        // var reg = /^[0-9a-zA-Z]$/; // 含义: 检测一个字符 该字符必须是0~9a-zA-Z之间的任何一个
        // console.log(reg.test("0"))
        // console.log(reg.test("9"))
        // console.log(reg.test("T"))
        // console.log(reg.test("g"))
        // console.log(reg.test("_"))

        // [^] 取反 只要出现在[]之内的 都不可以
        // 定义正则表达式
        // var reg = /^[^a]{0,}$/; // 含义 整个字符串中不能出现a这个字符
        // console.log(reg.test("ab"));
        // console.log(reg.test("b"));
        // console.log(reg.test("c"));
        // console.log(reg.test("d"));
        // console.log(reg.test("e"));
        // console.log(reg.test("f"));



        // . 这个元字符表示的是任意(除了回车和换行之外)
        // var reg = /.+/; 
        // var result = reg.test("a-dsfafwe-234123125324-dfszdff^$%^&*%$")
        // console.log(result);

        // | 表示或者 
        // var arr = ["a.txt", "b.jpg", "c.html", "d.css", "e.js", "f.png", "h.gif"];

        // // 定义正则  只要是以 jpg 或者 png 或者 gif 结尾的都算
        // var reg = /\.(jpg|png|gif)$/;
        // arr.forEach(function(value) {
        //     console.log(value + (reg.test(value) ? "是" : "不是") + "图片文件");
        // });

字符串方法replace

  • replace(drop, add);
    • drop 被替换下的内容
      • 可以是字符串
      • 可以是正则表达式
    • add 被替换上的内容
      • 可以是字符串
      • 可以是函数
        • 函数的返回值是被替换上的内容
        • 函数的参数
          • 第一个表示匹配到的内容
          • 第二个表示匹配到的内容的索引
          • 第三个表示原字符串
          • 如果正则表达式中有圆括号,则圆括号的内容会一一对应放在第二个参数位置及后面位置 原来的第二个参数和第三个参数会向后推移

简单的小例子

<script>
        var str = "abcd1sdfweaoif7sdofihaoiewhfoihe65afhuafhewaiuhfi912831289";
        // 规则:将所有的数字 替换成字符*
        // 常规方式: for 循环 挨个使用isNaN方法判定是否是数字如果是数字 再替换
        // 正则方式: 使用replace方法 第一个参数是正则表达式 第二个参数是*
        // var reg = /\d/g; // 含义:一个数字    替换后的结果是将每一个数字都替换成一个*
        // var reg1 = /\d+/g; // 含义:至少一个数字  替换后的结果是将多个数字替换成一个*
        

        // 第一个参数可以替换为正则
        // var str1 = str.replace(reg, "*");  
        // console.log(str1); 
        // var str2 = str.replace(reg1, "*");  
        // console.log(str2); 


        // 第二个参数可以替换为函数  它常常与正则一起使用 
        // 函数的返回值会作为替换上的结果 替换到正则所匹配的内容区域
        // 函数的参数 如果正则表达式中没有 () 则第一个参数是匹配到的内容 第二个参数是改内容位于原字符串的下标位置 第三个参数是原字符串
        // var reg = /\d+/g;
        // var str1 = str.replace(reg, function(match) {
        //     console.log(arguments);
        //     return "<>";
        // });
        // console.log(str1);

        // 带有圆括号的正则表达式
        // var str = "ac.d.ghi.hjk.xxx";
        // var reg = /(\.(\w+))/g;
        // var reg = /(\.\w+)/g;

        // str.replace(reg, function(match, $1, $2) {
        //     console.log(arguments);
        // })

        

    </script>

正则表达式的修饰符

<script>
        // 正则表达式由两部分组成 第一部分就是之前学习过的元字符 转移字符等 
        // 第二部分是修饰符 也叫做标识符  g:全局匹配 i:忽略大小写 m:多行匹配
        // var reg = /\d+/g; // g表示global 是全局的意思 正则表达式一旦加入它 就会进行全局匹配
    </script>

正则表达式方法

<script>
        // 正则表达式是引用类型 具备一些方法的 比如之前调用的test方法 
        // test方法 用于检测一个字符串是否符合正则表达式的规则描述 返回值是布尔值
        // var reg = /a/;
        // console.log(reg.test("a")); 


        // 以对象的形式输出正则 
        // console.dir(reg);

        // exec方法用于对字符串进行正则检测  返回值: 如果匹配到字符串的内容 就返回数组 如果匹配不到就返回null
        // var str = "www163com789";
        // var reg = /\d+/; // 含义: 至少一位数字

        // var arr = reg.exec(str);
        // console.log(arr);
        // 数组的成员就一个  就是匹配到的符合正则描述的字符串部分 
        // 数组有一个属性 index 表示这个成员的第一个字符在原字符串中的位置 下标
        // 数组还有一个属性 input  表示原字符串



        // 如果正则表达式带有g全局修饰符 那么exec方法在每一次执行时都会返回下一个匹配项的信息
        // var str = "www163com789";
        // var reg = /\d+/g; // 含义: 至少一位数字

        // var arr = reg.exec(str);
        // console.log(arr);
        // var arr = reg.exec(str);
        // console.log(arr);
        // var arr = reg.exec(str);
        // console.log(arr);

        
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值