正则表达以及字符串的方法

1.正则表达 



// 正则
// 1.检验一个字符串首尾是否有数字
// \d是数字
var reg = /^\d|\d$/g; //^开头  $结尾  |或
var str = '123abc2';

console.log(reg.test(str));
console.log(str.match(reg));



// RegExp对象方法
// test();  //检查字符串中指定的值  返回布尔
// exec();  //检索字符串中指定的值,返回找到的值。并确定其位置
// exec返回的是一个类数组

var reg1 = /ab/g;
var str1 = 'ababababbabababaababsb';
// 用exec()方法  

// exec()每执行一次就会改变下一个匹配坐标 lastIndex
// 最开始lastIndex为0
console.log(reg1.exec(str1)); //lastIndex为2
console.log(reg1.exec(str1)); //lastIndex为4
console.log(reg1.lastIndex);
console.log(reg1.exec(str1)); //lastIndex为6
// 可以控制lastIndex
reg1.lastIndex = 0;
console.log(reg1.exec(str1)); //lastIndex为2


// 如何匹配出叠词  (字)\1   ()用\1代表复制出第一个()中的元素 一模一样 (b)\1\1\1代表子bbbb
//    /(\w)\1\1\1/  四个括号中匹配出来的相同的字符
// 如:要匹配出 aaaa  这样的四个相同字符格式的字符

var reg2 = /(b)\1\1\1/g; //只能匹配出bbbb
var str2 = 'bbbbccccdddd';
console.log(str2.match(reg2));

var reg3 = /(\w)\1\1\1/g; //能匹配出四个相同的字符 bbbb cccc dddd 1111 AAAA
var str3 = 'bbbbccccdddd1111AAAA';
console.log(str3.match(reg3));

var reg4 = /(\w)\1(\w)\2/g; //能匹配出aabb或者aaaa这种格式 前两位后两位分别相同 \2代表复制第二个()
var str4 = 'aabbccccdddd1111AAAA';
console.log(str4.match(reg4));

2.string的方法

// 字符串方法 
// 1. match  用来匹配正则  返回一个或多个匹配到的值
var reg = /(\w)\1(\w)\2/g; //能匹配出aabb或者aaaa这种格式 前两位后两位分别相同 \2代表复制第二个()
var str = 'aabbccccdddd1111AAAA';
console.log(str.match(reg));

// 如果不带g全局匹配,那么match返回的格式与exec相同,都是类数组
var reg1 = /(\w)\1(\w)\2/; //能匹配出aabb或者aaaa这种格式 前两位后两位分别相同 \2代表复制第二个()
var str1 = '123aabbccccdddd1111AAAA';
console.log(str1.match(reg1));


// 2.search  返回匹配到的字符所在位置 没有返回-1
console.log(str1.search(reg1));


// 3.split  把字符串分隔为数组
var reg3 = /a/g;
// var reg3 = /(a)/g;//当加子表达式  分隔后的数组会有子表达式中的字符
var str3 = 'a123a456a789';
console.log(str3.split(reg3));



// 4.replace  替换字符串
// 普通替换功能
var reg4 = /a/g;//没有g  只替换第一个 有g替换所有
var str4 = 'ababababab';
console.log(str4.replace(reg4,'1'));

//如果要将aa bb交换顺序 可以用反向调用子表达式()  符号 $+第几个子表达式 
var reg5 = /(\w)\1(\w)\2/g;
var str5 = 'aabbaabbaabb';
console.log(str5.replace(reg5,'$2$2$1$1'))
console.log(str5.replace(reg5,'$2$1$2$1'))


// 也可以用function来返回替换的新内容
	// str.replace(reg,function(正则返回的值,第一个子表达式,第二个子表达式){})
console.log(str5.replace(reg5,function($,$1,$2){
	return $2+$2+$1+$1+'asasa';

}))

// 5.toUpperCase() 字母变大写
var str6 = 'asas';
console.log(str6.toUpperCase());

// 6.toLowerCase()  字母变小写
var str7 = 'ASD';
console.log(str7.toLowerCase());

// 将the-first-name 变成the-First-Name
// 思路:用正则找到-f -n  然后替换成大写的F  N
// 		 利用子表达式的反向调用
var reg8 = /-(\w)/g; //匹配到-x
var str8 = 'the-first-name';
// 由于自表达式的反向需要是字符串的格式'$1'。所以要用toUpperCase的话需要function内进行
console.log(str8.replace(reg8,function($,$1){
	return $1.toUpperCase();
}))


// 正向预查  正向断言 ?=x
// 如:要匹配到后面紧跟着b的a
var reg9 = /a(?=b)/g;
var str9 = 'abaaaacab';
console.log(str9.match(reg9)); //匹配出两个a



var reg9 = /a(?!b)/g; //后面不是b的a


// 利用正则对字符串去重
var str10 = 'aaaaaabbbbbbbbbccccccccc';
var reg10 = /(\w)\1*/g; //\1*代表多个子表达式里的值
// 用replace替换
console.log(str10.replace(reg10,'$1'));



// 1000000000  给数字加点 按国际的格式100.000.000

var str11 = '100000000000';
var reg11 = /(?=(\d{3})+$)/g;
console.log(str11.replace(reg11,'.'));
// 由于会上面的正则只是匹配3位数一个点  所以会出现.100.000  这种情况
var reg12 =  /(?=(\B)(\d{3})+$)/g;//用\B非字边界来区分  如果是不是字的边界处后面有3位数才匹配
console.log(str11.replace(reg12,'.'));



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值