js正则练习示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>js正则练习示例</title>
  </head>
  <body>
    <h1>打开控制台,看打印!</h1>
    <script>
      var content = '<a href="http://bb.com">这是个链接</a>sh<a href="http://a.com">这是个链接</a>'
      var b = /<a([\s]+|[\s]+[^<>]+[\s]+)href=(\"([^<>"\']*)\"|\'([^<>"\']*)\')[^<>]*>/gi

      content = 'aadf[测试连接](http://909.pub)ofa急急急(()aadf[ha](http://asai.cc)ofa急急急(()'
      var bstr = '\\[([^\\]]*)\\]\\(([^\\)]*)\\)'
      b = new RegExp(bstr, 'i')
      var s = content.toLowerCase().match(b)

      console.log(666.10001, s)
      //得到链接地址
      for (var i = 0; i < s.length; i++) {
        var ss = s[i].toLowerCase().match(b)
        console.log(666.10002, ss, RegExp.$1, RegExp.$2, RegExp.$3)
        // alert(RegExp.$3)
      }
      var rule = ['<a href="', '$2', '">', '$1', '</a>']

      function mdtohtml(mdstr, rexstr, newtmp) {
        console.log(666.888, mdstr, rexstr, newtmp)
        var rexmd = new RegExp(rexstr, 'gi')
        var arr = mdstr.toLowerCase().match(rexmd)
        if (arr?.length) {
          for (var i = 0; i < arr.length; i++) {
            var vas = arr[i].toLowerCase().match(rexmd)
            let newstr = ''
            rule.forEach((el) => {
              if (el === '$1') {
                newstr += RegExp.$1
              } else if (el === '$2') {
                newstr += RegExp.$2
              } else {
                newstr += el
              }
            })
            mdstr = mdstr.replace(arr[i], newstr)
            console.log(666.10008, arr, vas, newstr, RegExp.$1, RegExp.$2)
          }
        }
        return mdstr
      }
      console.log(666.30001, mdtohtml(content, bstr, rule))
    </script>
  </body>
</html>

(1)字符类

[]表示一个字符:
[abc]: abc其中的一个字符。
[a-z]: a-z中的任意一个字符。
[0-9]: 0-9中任意一个数字。
[a-zA-Z]: a-z或者A-Z中任意一个字符。

(2)开头,结尾匹配

表示开头,例如:"abc.*“,以“abc”开头的。
表示结尾,例如: " . ∗ x y z 表示结尾,例如:".*xyz 表示结尾,例如:".xyz”,以“xyz”结尾的。

(3)单个字符的其他表示

. 任意一个字符。
\d 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

注意:“\小写字母”代表一类字符,“\大写字母”代表相反的字符。
字符串中写“\” 代表 “\”。一个反斜杆表示转义,两个反斜杆代表一个反斜杠。

(4)数量词

X?:X出现0次或1次,?表示是否有一个。
X*:X出现0次或多次,*表示任意个。
X+:X出现1次或多次,+表示至少有一个。
X{n}:X恰好出现n次。
X{n,m}:X出现n-m次,n和m都包括了。

(5)正则表达式的分组:

捕获组通过数从左到右的开口括号计数编号。

例如:表达((A)(B( C)))。
有四个这样的团体:
0 ((A)(B( C)))
1 (A)(B( C))
2 (A)
3 (B( C))
4 ( C)
零组总是代表整个表达式。
$1表示第1组的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿赛工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值