JavaScript学习05-正则表达式

test和exec方法

var re = /abc/g;
var re2 = new RegExp("abc", "g");

/**
 * re.test(字符串) : 返回 true/false
   re.exec(字符串)) : 返回数组对象(多次调用,直接返回null)
 */

let bool = re.test("abc");
console.log(bool);

let res = re2.exec("aaa-abc-abc-abb-abc-cc");
console.log(res);
//res[0]匹配的子字符串
//index匹配的第一个字符串的位置
//input要匹配的字符串本身
//re加了g后执行一次返回一个结果,下次执行会继续从上次位置开始找
//i表示忽略大小写
//不加的话一直返回第一个匹配结果
console.log(res[0], res.index, res.input);
//类似如下方法
// let arr = [1, 3, 5];
// arr.index = 3;
// arr.input = "aa-bb-cc";
// console.log(arr);

正则公式

//$保证匹配的字符串在末尾
//^保证匹配的字符串在开头
//如果两个符号都加,只有abc能满足 abcabc不行
var re = /^abc$/gi;

var str = "acabc";

console.log(re.test(str));

var re2 = /[xyz]bc/; //xbc ybc zbc
var re3 = /[^xyz]bc/; //取反 除了x y z开头的都匹配
var re4 = /[1-7b-f]xy/; //5xy cxy
// . 代表任何字符 除了换行
var re5 = /.xy/; // " xy" "11xy"
// \d 0-9数字   \D 除了0-9 \s 空白字符 |S 除了空白字符
// \w 0-9a-zA-Z   \W 除了0-9a-zA-Z
var re6 = /\sa\s/;
console.log(re6.test("  a   "));
//量词
// {n} n个
// {n,} 至少n个
// {n, m} n至m个
// + 1个到多个
// * 0个到多个
// ? 0个或1个
var re7 = /[abc]{3}/; //acc
console.log(re7.test("aaa"));

var re8 = /^[abc]{3,}/;
console.log(re8.test("aabc"));

//贪图型,最长字符串匹配
var re9 = /x[abcy]*y/;
//非贪图型 只要匹配立刻返回
// var re9 = /x[abcy]*?y/;
var res = re9.exec("xabcyyy");
console.log(res);

分组和前瞻性

//分组
var re = /([abc]{3}\sxy){2,4}/;
console.log(re.test("aaa xybbb xy abc xy"));

//exec方法可以按组显示匹配的字符串
var re = /(A(B(C)))/;
var res = re.exec("ABC");
console.log(res);

var re = /\s([1-9]\d{4,11})@(qq|163)\.com\s/g;

var str = `
    12311241@qq.com eaflhlaehflkahfe 
    213123@163.com asdajd asdadad
    08392839@qq.com aeoaoefya 232eaf
    dsfsd
`;
var res;
do {
    res = re.exec(str);
    console.log(res && res[0] + res[1] + "-" + res[2]);
} while (res);

//前瞻 x仅仅用来判断是否满足 返回结果时只返回abc
var re = /(abc(?=x))/;
//前瞻性取反
// var re = /(abc(?!x))/;

console.log(re.exec("abcx"));

字符串中与正则相关操作

var s = 'guoyunhao';

s1 = s.substr(0, 3);
console.log(s1);
s2 = s.substring(0, 6);
console.log(s2);

//和正则表达式相关
s.search();
s.split();
s.replace();
s.match();

var str = ".aasd:asdda.asdf: asdas.aaaaaa:";
var re = /\.[a-z]+:/g;

let res = str.match(re);
console.log(res);

let resStr = str.replace(re, function(res, group1, index, str) {
    console.log(res, group1, index);
    return group1;
});

console.log(resStr);

 

posted @ 2018-07-23 16:21  Eric云皓  阅读(91)  评论(0编辑  收藏  举报