1、非空字符
该正则表达式可以用来分割字符串,比split的功能更强大。可以同时按照不同分隔符来分割字符串。
js
//在中括号中的^表示非的意思,\X20表示空格,/g表示全局搜索,使用match方法时将返回匹配数组
const rnothtmlwhite=/[^\x20\r\n\t\f]+/
//测试
"test".match(rnothtmlwhite);//=>["test"]
"test\rceshi".match(rnothtmlwhite);//["test","ceshi"]
"once memory\r334".match(/[^\x20\t\n\f\r]+/g);//=>["once","memory","334"]下面是该正则表达式在源码中的使用。
js
/*1、先将字符串转换成数组,
* 2、然后再将数组转换成key数组元素,value为true的对象
*/
function createOptions(options){
const option={};
//options.match(rnothtmlwhite)//将字符串转换成数组
jQuery.each(options.match(rnothtmlwhite)||[],function(_,flag){
option[flag]=true;
});
return option;
}
createOptions("once\tmemory");//{ "once":true,"memory":true }
createOptions("once memory");//{"once":true,"memory":true}2、匹配html的正则表达式
js
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;分析
- 通过选择|分割二义,匹配^开头或者$结尾
js
^(?:\s*(<[\w\W]+>)[^>]*
#([\w-]*))$^(?:\s*(<[\w\W]+>)[^>]*
(?:pattern): 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
js
const a = "123abc456ww";
let pattern = "([0-9]*)([a-z]*)([0-9]*)";
console.log(a.match(pattern));//["123abc456", "123", "abc", "456", index: 0, input: "123abc456ww", groups: undefined]
pattern = "(?:[0-9]*)([a-z]*)([0-9]*)";
console.log(a.match(pattern));//["123abc456", "abc", "456", index: 0, input: "123abc456ww", groups: undefined] 123没有被捕获\s*: 匹配任何空白字符,包括空格、制表符、换页符等等 零次或多次 等价于(pattern): 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,使用$0…$9属性- [\w\W]+ : 匹配于
[A-Za-z0-9_]或[^A-Za-z0-9_]一次或多次, 等价 - (<[wW]+>) :这个表示字符串里要包含用<>包含的字符,例如
<p>,<div>等等都是符合要求的 - [^>]* : 负值字符集合,字符串尾部是除了>的任意字符或者没有字符,零次或多次等价于{0,},
#([\w-]*))$匹配结尾带上#号的任意字符,包括下划线与-
3、匹配一个独立的标签
js
const rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
rsingleTag.test("<div>");//true
rsingleTag.test("<div/>");//true
const res=rsingleTag.exec("<div/>");
res[1];//=>div
rsingleTag.test("</div>");//false
rsingleTag.test("<div></div>");//true
rsingleTag.test("<div><div>");//false
const parsed=rsingleTag.exec("<div></div>");//parsed[1]=>div^<(\w+)\s*\/?>: 以<开头,至少跟着一个字符和任意个空白字符,之后出现0或1次/>(?:<\/\1>|)$: 可以匹配<、一个/或者空白并以之为结尾
