投资类wordpress主题,泰安seo培训,企查查入口网页版,安徽网站开发费用创建正则表达式 1.使用new来创建 var exp new RegExp(box , gi );g 全局匹配
i 忽略大小写
m 多行匹配2.使用字面量 var exp /box/gi; 直接用2个 / ; 在俩个斜杠后加上模式修饰符#xff1b; 俩种创建方式比较: 1.使用字面量方式创建用的更加广泛; 2.当要匹配的内容是变量时,… 创建正则表达式 1.使用new来创建 var exp new RegExp(box , gi );g 全局匹配
i 忽略大小写
m 多行匹配2.使用字面量 var exp /box/gi; 直接用2个 / ; 在俩个斜杠后加上模式修饰符 俩种创建方式比较: 1.使用字面量方式创建用的更加广泛; 2.当要匹配的内容是变量时,只能使用new来创建. 正则表达式的测试 1.test( ) 正则表达式对象.test(字符串) 参数要匹配的字符串 返回值匹配成功返回true失败返回false 例1:
var exp /Box/i;
var str box ;
alert(exp.test(str));true 忽略大小写 例2:
var exp /abc/g;
var str abcab;
var res exp.test(str);
console.log(res);
console.log(exp.test(str));
console.log(exp.test(str));true //从第一个开始匹配,匹配到了abc 返回true; false //由于开启了全局匹配,所以从上次匹配之后的位置开始匹配(也就是从第二个a开始); 若没有g 则每次都会从头开始匹配true //由于上次匹配是false并且已经将字符串str查找完了,所以又从头开始匹配 注: 开启了全局匹配g后,正则表达式内部有一个lastIndex的属性,用以记录下次开始查找的下标,保证其每次从lastIndex的位置开始查找 例3:
var exp /abc/g; //同一正则表达式匹配不同字符串
var str1 abc;
var str2 abcab;
console.log(exp.test(str1));
console.log(exp.test(str2));true; //从str1的0位开始匹配,匹配到了abc,返回true, 此时lastIndex为3false; //从str2中lastIndex的位置开始匹配,也就是从第二个a开始例4:
var exp1 /abc/g; //不同正则表达式匹配同一字符串
var exp2 /abc/g;
var str abc;
console.log(exp1.test(str));
console.log(exp2.test(str));true; //从str1的0位开始匹配,匹配到了abc,返回truetrue; //从str1的0位开始匹配,返回true2.exec( ) exec(字符串)该方法为专门为捕获组而设计的 参数要匹配的字符串 返回值返回的是一个数组。如果不匹配则返回null 关于返回值数组的说明 它确实是Array的实例。 但是这个数组有两个额外的属性index和 input index表示匹配的字符串在源字符串中的索引 input表示匹配的源字符串。 数组的第一项是与整个模式匹配的字符串其他项是与模式中捕获组匹配的字符串 如果没有捕获组则数组中只有第一项。关于捕获组的概念以后再说 例1:var exp /abc/gi;var str aaabcccdabcAbcAdaBc;var strNew ;while (strNewexp.exec(str)){ //使用while循环,将所有匹配到字符串输出来console.log(strNew[0]) //由于返回的是一个带有很多属性的数组,所以我们只要数组中的字符串,也就是索引为0.}正则表达式的规则 字符类:单个字母数字下划线
. //匹配除换行符外的任意字符(当点放在[]中是没有特殊意义)
var exp /\d/g; // [0-9]
var exp /\D/g; //[^0-9]
var exp /\w/g; //[a-zA-Z0-9_];
var exp /\W/g; //[^a-zA-Z0-9_];字符类:空白字符
\0 匹配null 字符
\b 匹配退格字符
\n 匹配换行符
\r 匹配回车字符
\t 匹配制表符
\s 匹配空白字符、空格、制表符和换行符
\S 匹配非空白字符单词边界
\b
示例
/\bcat\b/ 匹配到cat这个单词/B 非单词边界元字符/元符号 匹配情况
^ 行首匹配
$ 行尾匹配字符类重复字符
元字符/元符号 匹配情况
? 例如x? 匹配0个或1 个x
* 例如x* 匹配0个或任意多个x例如x 匹配至少一个x
(xyz) 匹配至少一个(xyz)
{m,n} 例如x{m,n} n次数m 匹配最少m个、最多n个x
{n} 匹配前一项n次
{n,} 匹配前一项n次或者多次1.[ ] 匹配[ ]内的任意一个字符 var exp /[abc]/gi; // []内代表匹配其中的一个字符: a 或 b 或 c
var exp /[a-zA-Z0-9_$]/g; //匹配26个大小写字母,0-9数字,下划线_ 美元符$ 中的任意一个;
var exp /[^a-zA-Z]/g //匹配任意不在括号中的字符集中的字符;
[ ]也可以配合? * {} 来使用; 如[a-z] 匹配至少一个[a-z]范围内的任意一个;2. ^ 俩种用法: 1.放在[ ] 内 表示非 var exp /[^a-zA-Z]/g //匹配任意不在括号中的字符集中的字符;2.放在[ ] 外,表示行首匹配 var exp /^\d/g; //规定行首必须是数字
var str 123qq;
console.log(exp.test(str)); //行首为数字1,返回true;
console.log(exp.lastIndex); //此时lastIndex 为1
console.log(exp.test(str)); //从下标为1的位置开始匹配,虽然下标为1的位置是数字,但却不是行首,返回false;3. $ 表示行尾匹配,用法与^ 相近 ^ 和 $ 合用 var exp /^\d\d$/g; //规定行首和行尾必须是数字
var str 12;
var str2 123;console.log(exp.test(str)); // trueconsole.log(exp.lastIndex); // 2console.log(exp.test(str)); //falseconsole.log(exp.lastIndex); //0console.log(exp.test(str)); //trueconsole.log(exp.test(str2)); //false //exp中规定了行首行尾为数字,中间无内容4. . 匹配除换行符外的任意字符(当点放在[ ]中是没有特殊意义) var exp /./g;
var str a;
console.log(exp.test(str));true若想匹配它本身. var exp /\./g;5. | 择一匹配(管道符号) 表示或 var exp /a|b/g;
var str a;
console.log(exp.test(str));true数量词的匹配:默认都是贪婪匹配 6. ? 匹配0个或者1个 7. * 匹配0个或者多个 var exp /a*/g;
var str aaaaa;console.log(exp.test(str)); //trueconsole.log(exp.test(str)); //true8. 匹配1个或多个 var exp /a/g;
var str aaaaa;console.log(exp.test(str)); //trueconsole.log(exp.test(str)); //false9. {n} 匹配n个,只能是n个 10. {n,} 匹配至少n个 11. {n,m} 匹配至少n个,最多m个 基本的正则表达式验证 写一个正在表达式,判断手机号是否合法
var exp /1[34578]\d{9}$/g;
var str 13979318939;console.log(exp.test(str));true
写一个正在表达式,判断邮箱是否合法
var exp /^\w{3,15}[\w-]\.(com|cn|net|org|edu|com\.cn)$/gi;
var str 133_dcn.com.cn;console.log(exp.exec(str)[0]);133_dcn.com.cn
写一个正则表达式,判断图片的地址是否合法
var exp /^(http|https):\/\/.\.(jpg|jpeg|gif|png)$/gi;
var str http://3323498dsfledf.png;console.log(exp.exec(str)[0]);http://3323498dsfledf.png
写一个正则表达式,爬取一堆字符串中的所有图片地址
var exp /http:\/\/[^:]\.(jpg|jpeg|gif|png)/gi;
写一个正则表达式,将字符串中的重复去掉
var exp /(.)\1/gi;
var str aabbccdd; console.log(str.replace(exp,$1));abc分组
其中分组体现在所有以(和)元字符所包含的正则表达式被分为一组每一个分组都是一个子表达式它也是构成高级正则表达式的基础。如果只是使用简单的(regex)匹配语法本质上和不分组是一样的如果要发挥它强大的作用往往要结合回溯引用的方式。var str 123-mm;
var strReg str.replace(/(\d)-([A-Za-z])/g,$2);
console.log(strReg)//mm 上面那段$2这个就是表示正则第二组个匹配到的内容方法 1.search( ) str.search(exp);检索与正则表达式相匹配的第一个匹配项的索引。返回值: 索引 ,没有返回-1;注:search( )不支持全局,每次调用总是从0开始查找.加不加g都一样 2.match( ) str.match(exp);把满足正则表达式的所有字符串一起返回返回值: 数组 ,没有返回null;var str abc134ABC244co9;console.log(str.match(/\d/gi)); //获取str中的所有数字的数组[134,244,9]注:如果想获取所有的满足的,应该使用全局g,使用全局的时候,分组的信息则拿不到 3.replace( ) str.replace(exp,newStr);将正则表达式替换返回值: 替换之后的字符串var str 123aaa244;console.log(str.replace(/\d/gi,)); //将str中的数字全部去掉aaa 写一个正则表达式,将字符串中的重复去掉
var exp /(.)\1/gi;
var str aabbccdd; console.log(str.replace(exp,$1));abc 4.split( ) str.split(exp,length);length:可选参,切出来的数组的最大长度使用split 拆分成字符串数组返回替换之后的字符串var str 102dsfe00dfefsf55;
var exp /\D/gi; //用所有非数字来切割console.log(str.split(exp)); [102,00,55]https://www.cnblogs.com/moqing/archive/2016/07/13/5665126.html /*** description:万能判断* param {type}* value/判断的焦点* type: 1/false(默认undefind也是false) 2/与焦点比对类型(小写)* return:1/焦点类型(小写) 2/boolean*/
function checkType(value, type) {const prototypeString Object.prototype.toString.call(value)const typeString prototypeString.replace(/\S*\s|]/gi, ).toLowerCase()return type ? type typeString : typeString
}
export default checkType匹配出现a或者b组合一起至少3次以上/(a|b){3,}/,匹配aaa,bbb,aab,baa,bba,bab等等正则表达式------捕获性分组非捕获性分组前瞻后瞻捕获性分组
javascript中捕获性分组是以小括号()来实现捕获性分组工作模式()会把每个分组里匹配的值保存起来。比如利用捕获性分组把 hello world 互换成 world hello方法一通过exec函数var str hello world; //首先创建好字符串
var pattern /([a-z])\s([a-z])/; //先通过正则匹配这个字符串用分组模式来获取这两个单词
var arr pattern.exec(str); // exec方法返回的是一个数组包含匹配到的字符串以及分组(也称子串)里的值console.log(arr); //[hello world,hello,world]
console.log(arr[0]); //hello world 匹配到的字符串
console.log(arr[1]); //hello 第一个分组([a-z])的值
console.log(arr[2]); //world 第二个分组([a-z])的值//这时候两个分组的值都得到了,接下来用字符串拼接法实现互换
var n_str arr[2] arr[1];
console.log(n_str) //world hello方法二通过属性$1-9var str hello world;
var pattern /([a-z])\s([a-z])/;
pattern.test(str); //这个地方必须运行正则匹配一次方式不限可以是test()、exec()、以及String的正则方式console.log(RegExp.$1) //hello 第一个分组([a-z])的值
console.log(RegExp.$2) //world 第二个分组([a-z])的值var n_str RegExp.$2 RegExp.$1;
console.log(n_str) //world hello方法三通过String的replace()var str hello world;
var pattern /([a-z])\s([a-z])/;
var n_str str.replace(pattern,$2 $1); //这里的$1、$2与方法二里的RegExp.$1、RegExp.$2作用是相同的。
console.log(n_str) //world hello非捕获性分组(?:)
非捕获性分组工作模式下分组(?:)会作为匹配校验并出现在匹配结果字符里面但不作为子匹配返回。比如利用非捕获性分组获取字符串000aaa111而且只返回一个值为aaa111的数组//先看用捕获性分组匹配会返回什么
var str1 000aaa111;
var pattern /([a-z])(\d)/; //捕获性分组匹配
var arr pattern.exec(str1);
console.log(arr) //[aaa111,aaa,111] 结果子串也获取到了这并不是我们想要的结果//非捕获性分组
var str2 000aaa111;
var pattern2 /(?:[a-z])(?:\d)/; //非捕获性分组匹配
var arr2 pattern.exec(str2);
console.log(arr2) //[aaa111] 结果正确 前瞻(?)和(?!)
前瞻分为正向前瞻和反(负)向前瞻正向前瞻(?表达式)表示后面要有什么反向前瞻(?!表达式)表示后面不能有什么。前瞻分组会作为匹配校验但不出现在匹配结果字符里面而且不作为子匹配返回。正向前瞻匹配一批图片格式
//正向前瞻匹配.jpg后缀文件名
var str 123.jpg,456.gif,abc.jpg;
var partern /\w(?\.jpg)/g; //正向前瞻匹配
console.log(str.match(partern)); //[123, abc] 返回结果正确没有匹配456.gif反向前瞻匹配一批字母加数字
//反向前瞻匹配3个及以上的a而且后面不能有000的字符
var str aaa000 aaaa111 aaaaaaa222;
var partern /a{3,}(?!000)/g; //反向前瞻匹配
console.log(str.match(partern)); //[aaaa, aaaaaaa] 返回结果正确没有匹配aaa000前瞻,可以放在位置不固定可前匹配和后匹配如/(?.jpg)\w/g;后顾(?)和(?!) —JavaScript不支持
后顾分为正向后顾和反(负)向后顾正向后顾(?表达式)表示前面要有什么反向后顾(?!表达式)表示前面不能有什么。
/正向后顾
(?abc) //前面需要有abc//反向后顾
(?!abc) //前面不能有abc名词解释:前瞻 先行断言
(?) 正向前瞻 正向零宽先行断言
(?!) 反向前瞻 负向前瞻 负向零宽先行断言后顾 后发断言
(?) 正向后顾 正向零宽后发断言
(?!) 反向后顾 负向后顾 负向零宽后发断言备注总结
可以通过多个前瞻组合一块控制字符串里边必须包含指定字符。
示例
(?.[0-9].)(?.[A-Z].)(?.[a-z].).{6,20} 可以匹配包含大写字母小写字母数字转载于:https://www.cnblogs.com/smzd/p/8798805.html