Skip to content

方括号 ​

本节目标:理解“方括号”的核心思路,并能把它用于实际开发或面试表达。 在正则表达式语法中,放括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符==~==表示。如果在方括号内添加脱字符==^==前缀,还可以表示范围之外的字符。例如:

[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>

本站总访问 — 次