正则表达式:
2、处理文本中的敏感词
原文链接:https://www.f2er.com/regex/361804.html
① 利用某种模式去匹配一类字符串的公式,
② 所有的字符串或数组的处理都可以使用正则进行简化处理
var str = 'dsdfdgg545fdf';
replace(searchValue,replaceValue)方法:
该方法在字符串中第一个出现的searchValue子字符串替换为replaceValue,并返回新的字符串,原有的字符串不受影响。
.(点号) 匹配除了换行符和其他Unicode行终止符(如回车符)之外的任意字符,等价于[^\n\r]
// 替换字符 var str = 'dfgdfgsff'; var reg = /s/; // 两个单斜杠之间 var result = str.replace(reg,'--'); console.log(result); // 替换文本 var str = '黄艺斌'; var reg = /黄/; // 两个单斜杠之间 var result = str.replace(reg,'哈'); console.log(result); // . 表示匹配任意字符(第一个首字符) var str = '黄艺斌'; var reg = /./; // 两个单斜杠之间一个 ‘.’ var result = str.replace(reg,'哈'); console.log(result);
// \.转义字符 对于特殊含义的字符,一律使用转义符号进行处理
var str = 'jubjpg.jpg'; var reg =/\.jpg/; var result = str.replace(reg,''); console.log(result);
// 匹配多个字符
// global -g 返回一个包含了所有匹配结果的数组,在不加g的时候往往寻找
//返回的是第一个匹配的结果
var str = 'jubsaadasdsd'; var reg =/a/g; var result = str.replace(reg,'*'); console.log(result); var str = 'jubsaadAAasdsd'; var reg =/a/gi; var result = str.replace(reg,'*'); console.log(result); // []表示匹配包含的任一字符 g是匹配多个字符 var str = 'asabsb'; var reg = /[ab]/g; var result = str.replace(reg,'z'); console.log(result); // []表示匹配包含的任一字符 g是匹配多个字符 var str = 'asabsbdfdf'; var reg = /[a-z]/g; // 匹配a-z之间的任一字符 var result = str.replace(reg,'*'); console.log(result); //match方法 查找符合条件的字符,返回一个数组, var str = 'asabs4599bd5454fd44f'; var reg = /\d+/g; //只包含一个数字类型的数组 var arr = str.match(reg); console.log(arr); //匹配所有数字 大小写字母 下划线 var str = 'asabADs_bdfd565648f'; var reg = /[0-9a-zA-Z_]/g; var result = str.replace(reg,'-'); console.log(result); // ^ 表示 除XXX之外,注意,这个^\必须出现在[]之内
|
||||||||||||
匹配内容的数量控制
匹配都是前一项的次数
Eg:
var str = 'ggle gogle google gooogle';
var reg =/go?gle/g;console.log(str.match(reg)); // ["ggle","gogle"] |
||||||||||||
① 由首位是字母或下划线,其余是字母,数字,下划线组成的6-10位字符串 var str = 'a_s54545s'; reg = /^[a-zA-Z_]{1}\W{5,9}$/; console.log(reg.exec(str)); ② 身份证匹配(18位): reg = /^\d{17}[0-9xX]$/; ③ 邮箱验证: 897482342@qq.com reg =/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/; ④ 电话号码验证 电话号码 3/4 - 7/8 (如:010-6593383)
reg = /^(\d{3,4}-)\d[7,8]$/;
贪婪匹配
: * + {n,} 尽可能多的从一段文本的开头匹配到文本的末尾,而不是从开始匹配到第一个符合匹配
写法(加问号): *? +? {n,}?
代码:匹配所有div
var str = '<div>你</div><div>我</div>';
var reg =/<div>.*?<\/div>/g; arr = str.match(reg); console.log(arr);
通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,
值得注意的是,分隔符“-”也可以作为边界
边界的相对性:
前向声明 (?=)
要求ab必须连续,但是只针对a进行替换
var str = 'baabsa';
reg = /a(?=b)/g;
str = str.replace(reg,'但是');
console.log(str);
反前向声明 (?!)
需要替换掉a,但是要求a后面不能有b
reg = /a(?!b)/g;
千分符(前向,反前向的运用)
var str = '3425965467'; var reg = /(?=(?!\b)(\d{3})+$)/g; // $表示从后面倒着走匹配 ?=表示前面加一个东西 ?!\b 前面不能有开始的空格 str = str.replace(reg,','); console.log(str); |
||||||||||||
子表达式 小括号 匹配19、20开头的四位数年份 reg = /(19|20)\d{2}/ var str = 'border-top-color'; var reg = /-(\w)/g; str = str.replace(reg,function($0,$1){ // $0代表正则的整体 $1代表正则的第一子项的内容 // console.log($0); return $1.toUpperCase(); }); console.log(str); var str = 'a'; var num = 0; var value = ''; // 拆分为数组 // 排序 // 组合 arr = str.split(''); arr = arr.sort(); str = arr.join(''); reg = /(\w)\1*/g; // \1表示 str.replace(reg,$1) { if (num < $0.length) { num = $0.length; value = $1; }; }) console.log(value+':'+num); |
扩展:
①用ASCII码表示
var reg = /\x61/; 匹配十六进制数,a十进制为97,十六进制为61,需要添加"\x"前缀
var reg = /\141/; 匹配八进制,八进制不需要添加前缀,直接反斜杠+编码值
②用Unicode表示:必须指定一个4位的十六进制值,并在前面添加"\u"前缀
var reg = /\u0061/;
var str = 'JavaScript';
console.log( str.match(reg)); //"a",index:1,input:"JavaScript"]
|
比较各种模式匹配的方法
方法 | 所属对象 | 参数 | 返回值 | 通用性 | 特殊性 |
exec() | 正则表达式 | 字符串 | 匹配结果的数组,如果没有找到,返回null | 通用性强大 | 一次只能匹配一个单元,并提供详细的返回信息 |
text() | 正则表达式 | 字符串 | 布尔值,表示是否匹配 | 快速验证 | 一次只能匹配一个单元,返回信息与exec()方法基本相似 |
search() | 字符串 | 正则表达式 | 匹配起始位置,如果没有找到任何匹配的字符串,则返回-1 | 简单字符定位 | 不执行全局匹配,将忽略标志g,也会忽略正则表达式的lastIndex属性 |
match() | 字符串 | 正则表达式 | 匹配的数组,或者匹配信息的数组 | 常用字符匹配方法 | 将根据全局模式的表示g,决定匹配操作的行为 |
replace() | 字符串 | 正则表达式,替换文本 | 返回替换后的新字符串 | 匹配替换操作 | 可以支持替换函数,同时可以获取更多匹配信息 |
作业:
var str = '<html><div><span><img />nihao</span>5656</div></html>';
var reg =/<\/?[^>]*>/g; str = str.replace(reg,''); console.log(str); |
var str = 'niha自由者odf自由者lfdl'; var reg = /自由者/g; str = str.replace(reg,'*'); console.log(str); |