Appearance
方括号
本节目标:理解“方括号”的核心思路,并能把它用于实际开发或面试表达。 在正则表达式语法中,放括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符==~==表示。如果在方括号内添加脱字符==^==前缀,还可以表示范围之外的字符。例如:
[abc]:查找方括号内任意一个字符。[^abc]:查找不在方括号内的字符。[0-9]:查找从 0 至 9 范围内的数字,即查找数字。[a-z]:查找从小写 a 到小写 z 范围内的字符,即查找小写字母。[A-Z]:查找从大写 A 到大写 Z 范围内的字符,即查找大写字母。[A-z]:查找从大写 A 到小写 z 范围内的字符,即所有大小写的字母。示例****1 字符范围遵循字符编码的顺序进行匹配。如果将要匹配的字符恰好在字符编码表中特定区域内,就可以使用这种方式表示。 中括号里加上尖号是“非”的意思 非字母的写法 [^a-zA-Z] 如果匹配任意 ASCII 字符:
**var** r = /[\u0000-\u00ff]/g;如果匹配任意双字节的汉字:**var** r = /[^\u0000-\u00ff]/g;如果匹配任意大小写字母和数字:**var** r = /[a-zA-Z0-9]/g;使用 Unicode 编码设计,匹配数字:**var** r = /[\u0030-\u0039]/g;使用下面字符模式可以匹配任意大写字母:**var** r = /[\u0041-\u004A]/g;使用下面字符模式可以匹配任意小写字母:**var** r = /[\u0061-\u007A]/g;**示例****2**
在字符范围内可以混用各种字符模式。**var** s = "abcdez"; //字符串直接量**var** r = /[abce-z]/g; //字符a、b、c,以及从e~z之间的任意字符**var** a = s.match(r); //返回数组["a","b","c","e","z"]示例****3 在中括号内不要有空格,否则会误解为还要匹配空格。
**var** r = /[0-9]/g;示例****4 字符范围可以组合使用,以便设计更灵活的匹配模式。
**var** s = "abc4 abd6 abe3 abf1 abg7"; //字符串直接量**var** r = /ab[c-g][1-7]/g; //前两个字符为ab,第三个字符为从c到g,第四个字符为1~7的任意数字**var** a = s.match(r); //返回数组["abc4","abd6","abe3","abf1","abg7"]示例****5 使用反义字符范围可以匹配很多无法直接描述的字符,达到以少应多的目的。
**var** r = /[^0123456789]/g;在这个正则表达式中,将会匹配除了数字以外任意的字符。反义字符类比简单字符类的功能更强大和实用。
获取url请求中参数的值。
params.param=params.param.replace(/([^?&=]+)=([^?&=]*)/g,function (ars, a, b) { if(/[\u4e00-\u9fa5]+/g.test(b))b=encodeURI(b)//如果是中文 转码 return a+"="+b;})其中,//g内的是正则,中括号中的上尖号代表非,[^],所以[^?&=]代表除了?&=之外的任意字符,[^?&=]+代表:‘至少一个除了?&=之外的任意字符’。等号=右边[^?&=]*代表0或者多个‘除了?&=之外的任意字符’
/([^?&=]+)=([^?&=]*)/g所以,下面这个url请求,匹配的结果是: roleName=测试角色名 、roleId=331 、 roleDesc=测试描述
[http://XXXXXX/editRole?roleName=](http://XXXXXX/editRole?roleName=%E6%B5%8B%E8%AF%95%E8%A7%92%E8%89%B2%E5%90%8D&roleId=331&roleDesc=%E6%B5%8B%E8%AF%95%E6%8F%8F%E8%BF%B0&callback=__jp27)测试角色名&roleId=331&roleDesc=测试描述&callback=__jp27> 来自 <https://blog.csdn.net/qq_26249609/article/details/94724586>
