js小记:test()、search()、match()、replace()、split()、

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/b954960630/article/details/82220141

总述:

  • exec()、match():一般获取字符串中 某指定子串 用
  • test():一般判断某字符串是否符合指定格式 用
  • replace():一般替换某指定字符串,或字符串格式转换 时用
  • search()、indexOf()、lastIndexOf:一般获取某子串的索引时用
  • split():一般涉及将字符串转换为数组 时用

注意:上面的所有函数都不改变原字符串


一、RegExp的方法

1、exec()
exec()是专门为捕获组而设计的。返回数组,没匹配到返回null
注:exec()与match()差不多

var str = 'car,bat,sat,asr';
var pattern = /.at/;

var matches = pattern.exec(str);
console.log(matches);               //["bat", index: 4, input: "car,bat,sat,asr"]
console.log(matches[0],matches[1]); //bat undefined
console.log(matches.index);         //4

console.log((/ss/).exec(str));      //null

matches = pattern.exec(str);
console.log(matches);               //["bat", index: 4, input: "car,bat,sat,asr"]
console.log(matches[0],matches[1]); //bat undefined
console.log(matches.index);         //4

var pattern2 = /.at/g;
var matches = pattern2.exec(str);
console.log(matches);               //["bat", index: 4, input: "car,bat,sat,asr"]
console.log(matches[0],matches[1]); //bat undefined
console.log(matches.index);         //4

matches = pattern2.exec(str);
console.log(matches);               //["bat", index: 4, input: "car,bat,sat,asr"]
console.log(matches[0],matches[1]); //sat undefined
console.log(matches.index);         //8

2、test()
test()接收一个字符串参数,若模式与该参数匹配则返回true,反之返回false

var str = '452-2344-42';
var str2 = '42-2344-42';
var str3 = 's42-2344-42';
var pattern = /^\d{3}-\d{4}-\d{2}$/;

//判断字符串是否满足 XXX-XXXX-XX 的格式,X为数字
function my(str){
    return pattern.test(str);
}

console.log(my(str));   //true
console.log(my(str2));  //false
console.log(my(str3));  //false

二、String的匹配方法

各个函数参数是什么,太基础了就不说了,直接上代码:
不懂正则表达式请参考:正则表达式30分钟入门教程

1、match():返回数组, 没匹配到返回null

var str = 'car,bat,sat,asr';

//match()返回数组,  没匹配到返回null
var ns = str.match(/.at/); 
console.log(ns);//["bat", index: 4, input: "car,bat,sat,asr"]
console.log(ns.index);//4
console.log(ns[0],ns[1]);//bat undefined

console.log(str.match(/ass/));//null

var ns2 = str.match(/.at/g); 
console.log(ns2);//["bat", "sat"]
console.log(ns2.index);//undefined
console.log(ns2[0],ns2[1]);//bat sat

2、search():返回索引, 没匹配到返回 -1

var str = 'car,bat,sat,asr';

//search()返回索引,  没匹配到返回 -1
var myindex = str.search(/.at/);
console.log(myindex); //4

console.log(str.search(/ase/));//-1

var myindex2 = str.search(/.at/g);
console.log(myindex2); //4

3、replace() : (原字符串不改变)返回处理后的字符串,没匹配的返回原字符串

var str = 'car,bat,sat,asr';

//replace()  , 源字符串不改变,返回处理后的字符串
console.log(str.replace('at','one')); //car,bone,sat,asr
console.log(str);//car,bat,sat,asr

console.log(str.replace(/.at/,'one')); //car,one,sat,asr
console.log(str.replace(/.at/g,'one'));//car,one,one,asr

console.log(str.replace(/.at/,'one($1)'));    //car,one($1),sat,asr
console.log(str.replace(/(.at)/,'one($1)'));  //car,one(bat),sat,asr
console.log(str.replace(/(.at)/g,'one($1)')); //car,one(bat),one(sat),asr
var str = 'car,bat,sat,asr';
///item为匹配字符的值,index是item的索引,originalText为原始字符串

console.log(str.replace(/[a-z]/g, (item,index,originalText) => {
    console.log(item,index,originalText);
}));

输出:
这里写图片描述

4、split():返回分割后的数组,不改变原字符串

var a = 'dadasx';

console.log(a.split(''));   //["d", "a", "d", "a", "s", "x"]
console.log(a.split('',2)); //["d", "a"]
console.log(a.split('a'))   //["d", "d", "sx"]

console.log(a); //dadasx

//将字符串a的顺序颠倒:
console.log(a.split('').reverse().join('')); //xsadad
console.log(a); //dadasx

//用 正则 分割
var a = 'adx#45xlz&45'; //遇到#或&就分割
console.log(a.split(/#|&/));  //["adx", "45xlz", "45"]

练习题目

1、大小写转换

var str = 'dADhQ22';

///把str全变大写
console.log(str.replace(/[a-z]/g, (item) => item.toUpperCase())); //DADHQ22
//把str全变小写
console.log(str.replace(/[A-Z]/g, (item) => item.toLowerCase())); //dadhq22

2、驼峰式字符串borderLeftColor和 连字符式字符串border-left-color相互转换

var str = 'borderLeftColor';
var str2 = 'border-left-color';

///把str换成  连字符式
console.log(str.replace(/[A-Z]/g, (item) => '-' + item.toLowerCase()));   //border-left-color
//把str换成  驼峰式
console.log(str2.replace(/-([a-z])/g, (item, $1) => $1.toUpperCase())); //borderLeftColor

3、部分位置替换:

var str = 'car,bat,sat,asr';
//位置调换
console.log(str.replace(/(\w+)\s*,\s*(\w+)/, '$2,$1'));//bat,car,sat,asr
console.log(str.replace(/(car+).*(asr+)/, '$2,$1'));//asr,car

这里写图片描述

4、给定字符串 str,检查其是否包含 连续的3个数字,如果包含,返回最新出现的 3 个数字的字符串;如果不包含,返回 false。

var a = '45545';
function captureThreeNumbers(str) {
    var arr = str.match(/\d{3}/);
    if(arr){
        return arr[0];
    }else{
        return false;
    }
}
console.log(captureThreeNumbers(a));//455

5、给定字符串 str,检查其是否以元音字母结尾。元音字母包括 a,e,i,o,u,以及对应的大写;若包含则返回 true,否则返回 false

function endsWithVowel(str) {
    return (/[a,e,i,o,u]$/i).test(str);
}
console.log(endsWithVowel('gorilla'));  //true
console.log(endsWithVowel('gorillE'));  //true
console.log(endsWithVowel('gorillx'));  //false

6、检查字符串是否重复
给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),若包含则返回 true,否则返回 false。

var str = 'rattler';
var str2 = 'adczg12';
function containsRepeatingLetter(str) {
    return (/([a-zA-Z])\1/).test(str)
}
console.log(containsRepeatingLetter(str));  //true
console.log(containsRepeatingLetter(str2)); //false

在正则表达式中,利用()进行分组,使用斜杠加数字表示引用,\1就是引用第一个分组,\2就是引用第二个分组。将[a-zA-Z]做为一个分组,然后引用,就可以判断是否有连续重复的字母。

猜你喜欢

转载自blog.csdn.net/b954960630/article/details/82220141
今日推荐