社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
var zz = document.getElementById('zhengze');
var str = "abcd"ef";//abcd"efg
str = "abcd\ef";//abcdef 转义了转义字符
str = "abcdnef";//n是换行符 但在文档里面无法看到换行
str = "abcrdef";//r 匹配一个回车符
str = "abcrndef"
console.log(str);
zz.innerHTML = str;
转义字符很简单,不解释.
第一种创建方法 reg.test(str2); i是忽略大小写
var reg = /abc/;
var str2 = "abcdefg";
reg = /abc/i;
str2 = "AbCdEfG";
console.log(str2);
console.log(reg.test(str2));
第二种创建方法 reg3 = new RegExp("abc");
var str3 = "abcdef";
var reg3 = new RegExp('abc');
console.log(reg3.test(str3));
第二种方法中带参数的 reg4 = new RegExp("abc","i");
var str4 = "abc24243abcruurabcrwr";
var reg4 = new RegExp('abc','i');
var reg6 = new RegExp('abc','g');
console.log(reg4.test(str4));
console.log(str4.match(reg6));
new RegExp()后面的括号里,除了放字符串还能放其他正则表达式.
var reg5 = new RegExp(reg);
注意:上面的表达式如果不带new,两个都是相同的一个reg.
test()和match()的使用.
//reg.test();
//str.match();
var str6 = "1 plus 2 equal 3";
console.log(str6.match(/d+/g));// ["1", "2", "3"] 数组
var str7 = "abcdena";
console.log(str7.match(/^a/gm));//["a", "a"]
//m的功能——即使断行的字符串,也能匹配的到
注意:上面的例子,展示了m的功能--即使断行的字符串,也能匹配的到.
//量词 n+
var reg1 = /w+/g;
var str1 = "abc";
console.log(str1.match(reg1));//["abc"]
//量词 n* n* {0, }
reg1 = /w*/g;
console.log(str1.match(reg1));
//["abc", ""] 两个数值,后面的空数值,是找完第一个数值后,游标所在的位置的数值
reg1 = /d*/g;
console.log(str1.match(reg1));//["", "", "", ""]
// d 匹配数字,因为*,输出4个空数值,也是游标的4各位置
//n? n? --> {0,1}
reg1 = /w?/g;
console.log(str1.match(reg1));//["a", "b", "c", ""]
//n {X}
reg1 = /w{3}/g;//3个3个的匹配
str1 = "abcfsfsfhlkjeoure";
console.log(str1.match(reg1));// ["abc", "fsf", "sfh", "lkj", "eou"]
//n{x,y}x到y个
reg1 = /w{3,5}/g;//匹配3到5个,能凑5个绝不凑4个,能凑4个绝不凑3个.贪婪匹配
str1 = "abcfsfsfhlkjeoure3";
console.log(str1.match(reg1));//["abcfs", "fsfhl", "kjeou", "re3"]
//n{x,} 匹配x到正无穷大,{1,}===n+, {0,}===n*;
reg1 = /w{4,}/g;
console.log(str1.match(reg1));//["abcfsfsfhlkjeoure3"]
var reg2 = /^d|d$/g;
var str1 = "abcfsfsfhlkjeoure3";
var str2 = "124shgeighERERdsdf459";
console.log(str2.match(reg2));//["1", "9"]
console.log(str1.match(reg2));//["3"]
reg2 = /^d[sS]*d$/g;
str2 = "124shgeighERERdsdf459";
console.log(str2.match(reg2));//["124shgeighERERdsdf459"]
console.log(str1.match(reg2));//null;
//exec 和 lastIndes
var reg3 = /ab/g;
var str3 = "abababababab";
console.log(reg3.lastIndex);// 0 游标位置
console.log(reg3.exec(str3));
// 类数组 ["ab", index: 0, input: "abababababab", groups: undefined]
console.log(reg3.lastIndex);//2 游标位置
console.log(reg3.exec(str3));
//["ab", index: 2, input: "abababababab", groups: undefined]
var str4 = "aaaabbbb哈哈哈哈";
var reg4 = /(D)111/g;
//反向引用子表达式(w),1拷贝一份w ,111拷贝3分,形成4个相同的
console.log(str4.match(reg4));// ["aaaa", "bbbb", "哈哈哈哈"]
//找出一个字符串中,"aabb"的字符串
str4 = "sdsd红红火火恍恍惚惚嘿嘿哈哈";
reg4 = /(D)1(D)2/g;
//1是匹配一个字符,2是匹配第二个字符
console.log(str4.match(reg4)); ["红红火火", "恍恍惚惚", "嘿嘿哈哈"]
//如果不带g, ["红红火火", "红", "火",]
//其中"红"是第一个子表达式(D)的内容,"火"是第二个子表达式(D)的内容
//search
console.log(str4.search(reg4));// 4 //search返回匹配到的位置
//search匹配不到返回-1
//replace()方法
var str5 = "aa";
var reg5 = /a/g;
console.log(str5.replace("a", "b"));//ba //只能匹配一个.
console.log(str5.replace(reg5, "b"));//bb,如果不加g,也只能匹配一个.
//将"aabb"的字符串,倒过来,变成"bbaa"
var str6 = "sdsd红红火火恍恍惚惚嘿嘿哈哈";
var reg6 = /(D)1(D)2/g;
console.log(str6.replace(reg6, "$2$2$1$1"));
//sdsd火火红红惚惚恍恍哈哈嘿嘿
console.log(str6.replace(reg6,function(name1,$1,$2){
//这里的第一个形参,是正则表达式匹配的全局结果aabb,随便给个名字
//第二个形参是第一个表达式的内容,第三个形参是第二个表达式的内容
return $2 + $2 + $1 + $1;
}));//sdsd火火红红惚惚恍恍哈哈嘿嘿
var reg7 = /-(w)/g;
var str7 = "the-first-name";
console.log(str7.replace(reg7,function(name, $1){
return $1.toUpperCase();
}));//theFirstName
var str8 = "abaaaaccc";
var reg8 = /a(?=b)/g;//查找b前面的a
console.log(str8.match(reg8));//["a"]
reg8 = /a{1,3}?/g;//加个?变成非贪婪匹配,能匹配1个,绝不匹配2个
console.log(str8.match(reg8)); ["a", "a", "a"]
var reg9 = /(w+)s(w+)/;
var str9 = "sfssge wgsg sgsgs sgggdogj"
console.log(str9.replace(reg9,'$$ $$'));
//前两个匹配的表达式替换成$ ,$ $ sgsgs sgggdogj
var str10 = "aaaabbbbbbccccccdddd";
var reg10 = /(w)1*/g;
console.log(str10.replace(reg10,'$1'));//"abcd"
var reg1 = /S+/g;
var str1 = "abc ewur 123 .,.,131";
console.log(str1.match(reg1));// ["abc", "ewur", "123", ".,.,131"]
下面来点有难度的吧!!
var reg1 = /[+-]?(?:d*.|)d+(?:[eE][+-]?d+|)/;
var str1 = "abc -324.43.123.65+1-23jdgr5685ewur";
console.log(str1.match(reg1));//"-324.43"
var reg1 = /^<(w+)s*/?>(?:</1>|)$/;
var str1 = "<div></div>";
console.log(str1.match(reg1));// <div></div>
var reg1 = /^<(w+)s*/?>(?:</1>|)$/;
var str1 = "<div>";
console.log(str1.match(reg1));// <div>
var reg1 = /^<(w+)s*/?>(?:</1>|)$/;
var str1 = "<2></2>";
console.log(str1.match(reg1));// <2></2>
var reg1 = /^<(w+)s*/?>(?:</1>|)$/;
var str1 = "<2>";
console.log(str1.match(reg1));// <2>
匹配一对儿html标签或单个html标签,可以带其他字符
var reg1 = /^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/;
var str1 = " <div id='12'>5 55 < /div > ";
console.log(str1.match(reg1));// <div id='12'>5 55 < /div >
var reg1 = /^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/;
var str1 = " <div id='12'>5 55 ";
console.log(str1.match(reg1));// <div id='12'>5 55
var reg1 = /^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/;
var str1 = " <div id='12'>wrwre5 55 <dsda> ";
console.log(str1.match(reg1));// <div id='12'>wrwre5 55 <dsda>
匹配短横线(-)和它后面的一个字母或数字
var reg1 = /-([da-z])/gi;
var str1 = "-<d-12i3v- - -id='-12'->-w5rwre5 55 -<dsda> ";
console.log(str1.match(reg1));// ["-1", "-i", "-1", "-w"]
(?:x)实例
匹配 x 不会捕获匹配项。这被称为非捕获括号(non-capturing parentheses)。匹配项不能够从结果数组的元素 [1], ..., [n] 或已被定义的 RegExp 对象的属性 9 再次访问到。
var reg1 = /(?:x)/g;
var str1 = "-<d-12i3v- - -id='x xxx-12'->-w5rwre5 55 -<dsda> ";
console.log(str1.match(reg1));// ["x", "x", "x", "x"]
还是 (?:x)的实例
只返回匹配的内容(包括该组匹配的内容)
不返回该组匹配的内容.
var m = 'abc'.match(/(?:.)b(.)/); m // ["abc", "c"]
var reg1 = /(?:.)b(.)/g;
var str1 = "-<d - idbbbbbb='x xxab1dx-12'b->-w5rwre5 55 -<dsda> ";
console.log(str1.match(reg1));// ["dbb", "bbb", "ab1", "'b-"]
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!