42-JavaScript-正则表达式


1. 引入


 1) 在一个字符串中找到连续的四个数字
 2) 验证 邮箱 身份证号 等 格式是否合法

 RegExp对象(Regular Expression), 是对字符串执行模式匹配的强大工具.

 1.2 基本概念


    指一个用来描述或匹配一系列符合某个语法规则的字符串的单个字符串.
    在很多文本编辑器或其他工具里,
    正则表达式通常被用来检索或替换那些符合某个模式的文本内容.
    许多程序设计语言都支持正则表达式来对字符串进制操作.

    所谓正则表达式,
    就是用某种某事去匹配一类字符串的公式.
    在JS中, 一个正则表达式 即为 RegExp类的一个对象.

 1.3 格式


 1) 隐式 /pattern/[flag]

    var regExp = /正则表达式/gi; 

 2) 显示 new RegExp("pattern"[, "flag"] )

    var regExp = new RegExp("正则表达式", "gi");    

 3) 注 

    g, global, 找到后继续往下找; 
    i, ignore, 忽略大小写;
    m, multiline, 考虑换行,如查找那些以"A"打头的行.

 3) 示例

    var numsReg = /(\d){4}/gi  ;
    var numsReg = new RegExp("(\\d){4}", "gi") ; // 反斜线 需转义

 1.4 例子

<html>
<body>
    <textarea id="content" rows='5' cols="50"></textarea> <br/>
    <button οnclick="checkByRegExp()">Test</button> <br/>
    <select id="show" size="10"><option>----Index</option></select>
</body>
</html>
<script type="text/javascript">
    
    var content;
    var show;

    content = document.getElementById("content");
    show = document.getElementById("show");

    // 筛选出连续的四个数字 
    // var numsReg = /(\d){4}/gi  ;
    var numsReg = new RegExp("(\\d){4}", "gi") ;

    function checkByRegExp() {

        // console.info(content.value);

        var matchStr = null;;
        // console.info( matchStrings );


        while( (matchStr = numsReg.exec( content.value )) ) {
            // console.info( matchStr[0] );
            show.appendChild( new Option(matchStr[0] + "---" + matchStr[1]) );
        }


    }


</script>

2. 详解


 - 正则表达式的概念
 - 正则表达式对象(RegExp对象) 
 - RegExp的方法
 - String对象中与正则表达式有关的方法
 - RegExp的属性
 - 正则表达式的语法
 - 实际应用案例

 2.1 RegExp的方法


  1) exec(string)

     检索字符串, 有则返回数组, 无则返回null

  2) test(string)

     检索字符串是否匹配模式, 有则返回true, 无则返回false
<script type="text/javascript">
    
    var charsReg = /abc/gi ;

    console.info( "ab?  " + charsReg.test("ab") );
    console.info( "abc? " + charsReg.test("abc") );
/*    
    ab?  false
    abc? true
*/
</script>


 2.2 与String对象相关的方法


  1) match(regExp)

     返回数组(所有找到的子串组合成的数组)

  2) search(regExp)

     返回第一个符合的子串的位置, 无则返回-1

  3) replace(regExp, replaceString)

  4) split(regExp)     

  5) 举例


<script type="text/javascript">
    
    var str = "a1b2c3d4e5";
    var regExp = /\d/g;

    console.info( str.match(regExp) ); 
    // ["1", "2", "3", "4", "5"]

    console.info( str.search(regExp) ); 
    // 1

    console.info( str.replace(regExp, "X") );
    // aXbXcXdXeX

    console.info( str.split(regExp) );
    // ["a", "b", "c", "d", "e", ""]

</script>


 2.3 RegExp对象的属性


  2.3.1 静态属性 与 实例属性


    静态属性 是属于 RegExp类的;
    示例属性 是属于 RegExp对象的.

  2.3.2 静态属性


   1) index

      当前模式匹配到的第一个串的索引;没匹配到则为-1.
      IE支持,FireFox不支持.

   2) lastindex

      当前模式匹配到的第一个串的后一个字符的索引;否则为0.

   3) input
 
      返回当前所作用的字符串.
 
   4) leftContext
 
      当前模式匹配到的最后一个串的 左边所有内容
 
   5) rightContext

   6) 示例

<script type="text/javascript">
    
var str = "01abc5abc9";

var regExp = /abc/gi;

console.info( regExp.exec( str ) );
// console.info( RegExp.index );
console.info( RegExp.leftContext );
console.info( RegExp.rightContext );

console.info( regExp.exec( str ) );
console.info( RegExp.leftContext );
console.info( RegExp.rightContext );

/*
    ["abc"]
    01
    5abc9
    ["abc"]
    01abc5
    9
*/


</script>



  2.3.3 示例属性


   1) global      : 创建对象时,是否指定了global

   2) ignoreCase

   3) multiline

   4) source
     : 返回模式字符串

   5) 示例
<script type="text/javascript">
    
var str = "01abc5abc9";

var regExp = /abc/gi;

console.info( regExp.global );
console.info( regExp.ignoreCase );
console.info( regExp.multiline );
console.info( regExp.source );

/*
    true
    true
    false
    abc
*/
</script>


 2.4 子表达式 捕获 反向引用

  

  2.4.1 概念


   如图




   1) 子表达式

      用圆括号 括起来 的一个比较复杂的匹配模式,
      该圆括号部分 称之为 ~.

   2) 捕获

      多个子表达式锁匹配的内容按顺序出现在内存的缓冲区中,称之为~.

   3) 反向引用
   
      圆括号的内容被捕获后, 可以在这个括号后被使用, 称之为~.

  2.4.2 示例

<script type="text/javascript">

// 匹配连续的四个数字, 
// 并且第一个数与第四个数相同, 第二个数与第三个数相同

var str = "012345665";

var regExp = /(\d)(\d)\2\1/gi;

console.info( str.search( regExp ) );
console.info( regExp.exec( str ) );

/*
    5
    ["5665", "5", "6"]
*/



// 匹配连续相同的3个数字

str = "122333444455555";
regExp = /(\d)\1{2}/gi;

for ( ; result = regExp.exec(str); ) {
    console.info(result);
}

/*
    ["333", "3"]
    ["444", "4"]
    ["555", "5"]
*/

</script>


 2.5 元字符


  - 限定符
  - 选择匹配符
  - 分组组合和反向引用符
  - 特殊字符
  - 字符匹配符
  - 定位符

  2.5.1 限定符


   1) 概念

      用于指定其前面的字符和组合项连续出现多少次.

   2) 模式
   
      ① X{n}        n 个X

      ② X{n, m}     n到m 个X

      ③ X+          大于等于 1 个X  

      ④ X*          大于等于 0 个X  

      ⑤ X?          0个X 或 1个X


   3) 举例

      字符串 "aaaaaa"

      /a{3}/gi    -> "aaa" "aaa"

      /a{2,4}/gi  -> "aaaa" "aa"

      /a+/gi  -> "aaaaaa"      

<script type="text/javascript">

// 匹配连续的四个数字, 
// 并且第一个数与第四个数相同, 第二个数与第三个数相同

var str = "aaaaaa";

var regExp = /a{3}/gi;

var result = null;

for ( ; result = regExp.exec(str); ) {
    //console.info(result);
}
/*
    ["aaa"]
    ["aaa"]
*/

regExp = /a{2,4}/gi;

for ( ; result = regExp.exec(str); ) {
    // console.info(result);
}
/*
    ["aaaa"]
    ["aa"]
*/


regExp = /a+/gi;

for ( ; result = regExp.exec(str); ) {
    // console.info(result);
}
/*
    ["aaaaaa"]
*/

regExp = /a*/gi;

for ( ; (result = regExp.exec(str)) != ""; ) {
    console.info(result);
}
/*
    ["aaaaaa"]
*/

</script>

   4) 注意

      JS默认匹配中使用的是贪婪匹配原则,
      即每次匹配最多符合要求的子串.

  2.5.2 选择匹配符


   1) 概念

      多选一.

   2) 模式

      [abcd]        "abcd" 中任意一个

      [A-Za-z0-9]   任意一个英文字母 或 阿拉伯数字

      [^a-z]        不是小写英文字母

  2.5.3 字符匹配符


   1) 概念

      匹配指定类型字符.

   2) 模式

      \d    <==> [0-9]
      \D    <==> [^0-9]
      \w    <==> [A-Za-z0-9_]
      \W    <==> [^A-Za-z0-9_]
      \s    空白字符(空格, 制表符等不可见字符)
      \S    非空白字符
      .     匹配除 \n 外的所有字符.

   3) 注意

      匹配域名中的".", /\./gi

  2.5.4 转义符号 \


   1) 概念

      取消某些特定符号的特殊意义.

   2) 需要被转义的字符

      ① .    (句点)
      ② *    (星号)
      ③ +    (加号)
      ④ ?    (问号)
      ⑤ ( )  (左右小括号)
      ⑥ [ ]  (左右中括号)
      ⑦ { }  (左右花括号)
      ⑧ $ ^
      ⑨ \    (反斜线)

  2.5.5 定位符


   1) 概念

      指定开头(^) 或结尾($).

   2) 模式

      /^hello/gi    匹配开头的"hello"

      /hello$/gi    匹配结尾的"hello"    

  2.5.6 选择匹配符 |


   1) 概念

      使用 | (竖线) 连接多个模式 并以小括号包裹, 多选一.

   2) 模式

      \(abc|123)\gi    匹配 abc 或者 123


      





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript正则表达式和Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换为Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式中使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式中使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式中使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式中使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式中使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换为Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值