<!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组的值。