js 正则函数初级之二

时间:2022-10-25 22:30:59

1. 小括号在正则中:

1.1 小括号:表示分组

1.2 分组之后,,每个组都有一个序号,从左到右,依次为1,2,3.......;可以使用 RegExp.$1,RegExp.$2,RegExp.$3分别获取匹配后的各组的结果

     <script>
// 小括号: 对匹配进行分组
// 分组之后, 每个组都有一个序号, 从左到右 依次为1, 2.....
var str = 'abca';
// var re = /(a)(b)ca/;
var re = /(a)(b)c\1/; // 正则表达式同 /(a)(b)ca/ ;
console.log(str.match(re));
//引用分组: \+组序号 引用子组的内容
console.log(RegExp.$1); // 获取第一个子组的匹配内容 ,结果为 a
console.log(RegExp.$2); // 获取第一个子组的匹配内容 结果为 b
</script>

js 正则函数初级之二

2. 中括号[]:中括号里面的内容,作为一个整体,提配一个字符或者位置

2.1

     <script>
// 中括号[]: 中括号里面的内容 是作为一个整体 匹配一个字符或者位置
var str = 'a%c';
var re = /abc/;
console.log(re.test(str)); //false
var re = /a[bc]c/;
console.log(re.test(str)); //false
var re = /a[a-zA-Z0-9]c/;
console.log(re.test(str)); //false
//^:脱字符, 用在中括号中 表示非, 用在中括号外面 表示 以....开头
var re = /a[^a-zA-Z0-9]c/;
console.log(re.test(str)); //true
</script>

js 正则函数初级之二

2.2

  <script>
var regex1 = /a[123]b/;
var regex2 = /a[123]b/g;
var string = "a0b a1b a2b a3b a4b";
console.log(string.match(regex1)); // ["a1b"]
console.log(string.match(regex2)); // ["a1b", "a2b", "a3b"]
</script>

js 正则函数初级之二

3. 贪婪与惰性匹配

3.1 贪婪匹配

     <script>
// 贪婪匹配,匹配全局
var regex = /\d{2,5}/g; //全局匹配2个到5个数字
var string = "123 1234 12345 123456";
console.log(string.match(regex)); // ["123", "1234", "12345", "12345"]
</script>

js 正则函数初级之二

3.2 惰性匹配:在正则表达式里加一个 “?”号

 <script>
//?--> 懒惰,能匹配到2个, 我就不会去匹配5个
var regex = /\d{2,5}?/g; // 全局懒惰匹配,匹配2个到5个数字
var string = "1231234 123 451 23456";
console.log(string.match(regex)); //["12","31","23","12","45","23","45"]
</script>

js 正则函数初级之二

4.分支:

4.1

  <script>
// \b: 边界( 空格 )
// 分析:
// 1,先分析一个字符串的 所有位置上的 字符组成的可能性
// 2,再分析 整体组合规则, 一般在这个时候, 碰到最多的情况就是分组
// 3,再思考每个分支的具体条件 var regex = /#([0-9a-fA-F]{6}\b|[0-9a-fA-F]{3}\b)/g;
var string = "#ffbbad #Fc01DF #FFF #ffE #f38a 222 33355462";
console.log(string.match(regex)); //["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]
</script>

js 正则函数初级之二

4.2

 <script>
var regex = /nice|good/;
var regex1 = /nice|good/g;
var string = "idea good idea, nice try.";
console.log(string.match(regex)); // ["good", index: 5, input: "idea good idea, nice try."]
console.log(string.match(regex1)); // ["good", "nice"] var regex3 = /good|goodbye/g;
var string = "goodbye";
console.log(string.match(regex3)); // ["good"] var regex4 = /goodbye|good/;
var regex5 = /good|goodbye/;
//因为goodbye包含good, 如果想匹配goodbye, 需要把goodbye写在左边
var string = "goodbye";
console.log(string.match(regex4)); //["goodbye", index: 0, input: "goodbye"]
console.log(string.match(regex5)); //["good", index: 0, input: "goodbye"]
</script>

js 正则函数初级之二

5. 敏感词过滤:

 <!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
window.onload = function() {
var aT = document.querySelectorAll("textarea");
var oBtn = document.querySelector("input");
oBtn.onclick = function() {
//| 叫做分支
var re = /Sb|你妹的|靠/ig;
// repalce 第一个参数 代表要匹配的正则表达式
// replace 第二个参数 function
aT[1].value = aT[0].value.replace(re, function(s, s1, s2) {
// replace()的function(s,s1,s2)中有三个参数,第一个是传入的待提换的字符串s,第二个是该字符串在整体字符串中的位置s1,第三个是整个字符串s2
var temp = "";
for (var i = 0; i < s.length; i++) {
temp += "*";
}
return temp;
});
}
}
</script>
</head> <body>
<textarea name="" id="" cols="30" rows="10"></textarea>
<br>
<input type="button" value="替换">
<br>
<textarea name="" id="" cols="30" rows="10"></textarea>
<br>
</body> </html>

运行结果:

js 正则函数初级之二