正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。
正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。
在 JavaScript 中,可以通过两种方式创建一个正则表达式。
var regexp = new RegExp(/123/);
console.log(regexp);
var re = /123/;
console.log(re);
test() 正则对象方法,用于检测字符串是否符合该规则,该对象会返回 true 或 false,其参数是测试字符串。
用法: regexObj.test(str)
var re = /123/;
console.log(re.test('123'));
一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单和特殊字符的组合,比如 /ab/*c/ 。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ 、$ 、+ 等。
我们分几类简单介绍一下:
// 边界符 ^$
var re = /abc/;
// 只要包含abc就为true
console.log(re.test('abc'));
console.log(re.test("abcd"));
console.log(re.test("aabcd"));
console.log("-------------");
var reg = /^abc/; // 以abc开头为true
console.log(reg.test('abc'));
console.log(reg.test("abcd"));
console.log(reg.test("aabcd"));
console.log("-------------");
var reg1 = /^abc$/; // 必须是abc
console.log(reg1.test('abc'));
console.log(reg1.test("abcd"));
console.log(reg1.test("aabcd"));
console.log("-------------");
字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内。
(1) [] 方括号
只要包含[]里面的任意一个字符即可返回true。
// 字符类:[] 表示包含[]里面的任意一个字符即可
var rg = /[abc]/;
console.log(rg.test('andy')); // true
console.log(rg.test('color')); // true
console.log(rg.test("red")); // false
(2)[-] 方括号内部 范围符-
例如[a-z]表示从a-z的所有字母
// [-] 范围
var rg1 = /^[a-z]$/;
console.log(rg1.test("a")); // true
console.log(rg1.test("z")); // true
console.log(rg1.test("A")); // false
console.log(rg1.test("11")); //false
(3)[^] 方括号内部 取反符^
方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。
// []里面有^表示取反, 表示不能包含
var reg1 = /^[^a-zA-Z0-9_-]$/;
console.log(reg1.test('a'));
console.log(reg1.test('4'));
console.log(reg1.test('+'));
注意和边界符 ^ 区别,边界符写到方括号外面。
正则表达式中也可以包含一些量词符来方便操作。
// 1. * 重复>=0次
var reg = /^a*$/;
console.log(reg.test(""));
console.log(reg.test("aaaaaaa"));
console.log("-----------------------");
// 2. + 重复>=1次
var reg = /^a+$/;
console.log(reg.test(""));
console.log(reg.test("aaaaaaaa"));
console.log("-----------------------");
// 3. ? 重复一次或者零次
var reg = /^a?$/;
console.log(reg.test("dfghj"));
console.log(reg.test(""));
console.log(reg.test("a"));
console.log(reg.test("aa"));
console.log("-----------------------");
// 4. {n} 重复n次
var reg = /^a{3}$/;
console.log(reg.test(""));
console.log(reg.test("a"));
console.log(reg.test("aaa"));
console.log("-----------------------");
// 5. {n,} >=n次
var reg = /^a{3,}$/;
console.log(reg.test(""));
console.log(reg.test("aaaaaa"));
console.log(reg.test("aaa"));
console.log("-----------------------");
// 6. {m,n} >=m && <=n次
var reg = /^a{3,5}$/;
console.log(reg.test(""));
console.log(reg.test("aaaaa"));
console.log(reg.test("aaaaaaaaaaa"));
console.log("-----------------------");
括号总结
正则表达式中有这么多的括号,他们都表示什么意思呢?我们现在做一个总结:
// 中括号 字符集和,匹配括号中的字符
var reg = /^[]$/;
// 大括号 量词符 重复次数
var reg = /^abc{3}$/; // abccc
// 小括号 表示优先级
var reg = /^(abc){3}$/;
console.log(reg.test("abcabcabc")); // true
预定义类指的是某些常见模式的简写方式。
// \d匹配整数
var reg = /^\d$/;
// \D匹配非数字
var reg = /^\D$/;
// \w匹配任意的字母数字下划线 /a-zA-z0-9_/
var reg = /^\w$/;
// \W除了字母数字下划线
var reg = /^\W$/;
// \s 匹配是否为空
var reg = /^\s$/;
// \S 非空
在游戏中,你是否见到过左下角聊天框内容含有**这样的字符,这是因为聊天内容含有敏感词汇而被和谐掉了,正则表达式也可以实现这样的操作。
其方法如下:
比如下面这个例子,我想要屏蔽掉**激情/*/*这个词
var strs = "今天真是美好的一天,同学们激情四射,激情的讨论";
var newStr = strs.replace(/激情/, "**");
console.log(newStr);
看看结果输出,激情确实被屏蔽了,但是第二个并没有被屏蔽,这是因为replace只能替换掉第一次出现的元素。
这时候怎么办呢?我们可以使用正则表达式的修饰符,其参数如下:
我们只需要在正则表达式后面加上一个g,就可以全局替换。
var strs = "今天真是美好的一天,同学们激情四射,激情的讨论";
var newStr = strs.replace(/激情/g, "**");
console.log(newStr);
看看输出结果:
ES6系列:
ES6—(1)新增语法及扩展方法
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_46186155/article/details/120374049
内容来源于网络,如有侵权,请联系作者删除!