这篇主要是说明正则会使用到的方法
首先我们先随便来一串字符串:
let content = 'gabgAjklbgadlkjgbajkdgbAjldgbadg'
首先是一个不需要使用正则的简单方法
indexOf
如果是使用简单的匹配str或者截取匹配到的文字,我会使用str.indexOf(searchvalue,[fromindex]),匹配到结果会返回第一个值的索引,如果没有匹配到返回-1,
目前遇到两种情况使用的话相比较正则会有些许复杂,就是正则里的g全局匹配和i不区分大小写,若仅仅是判断匹配大小写,将str和searchvalue全部转成toLowerCase()小写即可在进行判断,
如果仅仅是使用查找单个连续字符在目标str中是否存在建议使用indexOf(),
// toLowerCase()可以区分大小写
content.toLowerCase().indexOf('aj') // 4
// 如果要获取所有匹配的个数
let currentIndex = content.toLocaleLowerCase().indexOf('aj');
let indexArr = [];
for(var i = 0;i<content.length;i++) {
if(currentIndex!=-1) {
indexArr.push(currentIndex);
currentIndex = content.toLocaleLowerCase().indexOf('aj',currentIndex+1)
}
}
console.log(indexArr); // [4, 17, 23]
includes
es6中也有一个好用的方法: str.includes(searchvalue,[fromIndex])
includes()方法返回的是一个布尔值,includes()还可以判断undefined和NaN
content.toLowerCase().includes('aj') // true
不常用的exec()
exec()方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。
用法:regexObj.exec(str) 若无匹配返回null,若有值返回数组
心得:返回的数组第一个参数是匹配到正则的首个字符串,第二个是首个的索引,第三个是你的被正则的str
console.log(/aj/i.exec(content))
// ["Aj", index: 4, input: "gabgAjklbgadlkjgbajkdgbAjldgbadg", groups: undefined]
简单测试是否匹配的方法test()
test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false
用法:regexObj.test(str)
如果正则表达式设置了全局标志,test() 的执行会改变正则表达式 lastIndex属性。连续的执行test()方法,后续的执行将会从 lastIndex 处开始匹配字符串,(exec() 同样改变正则本身的 lastIndex属性值).@1
心得:这个test和indexOf其实差不多,用于判断是否存在方便,若匹配较为复杂肯定比indexOf好用
结论:简单好用,仅仅用于判断是否匹配
console.log(/aj/ig.test(content)); // true
@1
var regex = /aj/ig;
console.log(regex.test(content)); // true
console.log(regex.test(content)); // true
console.log(regex.test(content)); // true
console.log(regex.test(content)); // false
最最好用的来啦:match()
match()方法检索返回一个字符串匹配正则表达式的的结果。
用法:str.match(regexp) 注意和前两个不同,match是字符串方法,前两个是RegExp方法
如果使用g标志,则将返回与完整正则表达式匹配的所有结果;如果不使用g,返回结果和exec相同
console.log(content.match(/aj/ig));
// ["Aj", "aj", "Aj"]
返回布尔值的字符串方法search()
search()这一个方法和test()类似,不过这是字符串方法
用法:str.search(regexp)
如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1。
类似于正则表达式的 test() 方法。
console.log(content.search(/aj/ig));
// 4
对正则匹配到的字段进行替换replace()
replace() 方法返回一个由替换值替换一些或所有匹配的模式(pattern)后的新字符串。
语法:str.replace(regexp|substr, newSubStr|function)
regexp :正则表达式查找需要被替换的内容
substr :一个将被替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。
newSubStr :用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名。详情可见https://developer.mozilla.org...
function :一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。
总结:就是将字符串匹配到的第一个参数的内容,替换成第二个参数的内容并返回一个新字符串,并且第一个参数为字符串的话只能替换第一个匹配到的内容。
注意一个部分或全部匹配由替代模式所取代的新的字符串。并没有改变原有的字符串。
// 给出一个已经写好的替换高亮显示的函数
function highLightKeyword(txt, searchValue) {
if (!txt) return ''; // txt为被执行替换的字符串
if (!searchValue) return ''; // searchValue为需要匹配的内容
const keywords = searchValue.split(''); // 将所有单词切分成单字组成一个数组
for (const keyword of keywords) {
txt = txt.replace(new RegExp(`(${keyword})`, 'ig'), `<strong>$1</strong>`);
}
return txt;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。