查找字符串的位置:
有两个实现的方式lastIndexOf()和indexOf();
indexOf(searchString,index)接受两个参数,searchString是首次出现的位置,如果没有找到则返回-1,
该方法会隐式调用String()转型函数,将searchString非字符串转化为字符串;隐式调用Number()转型函数。将index非数字(undefined除外)转换为数值。
searchString表示要搜索的字符串。index表示开始的位置,若忽略该参数或者改参数是undefined、NAN,或者负数时,则index=0;
var string = 'hello world world';
console.log(string.indexOf('ld'));//9
console.log(string.indexOf('ld',undefined));//9
console.log(string.indexOf('ld',NaN));//9
console.log(string.indexOf('ld',-1));//9
console.log(string.indexOf('ld',10));//15
console.log(string.indexOf('ld',[10]));//15
console.log(string.indexOf('true',[10]));//-1
console.log(string.indexOf(false,[10]));//-1
lastIndexOf();
lastIndexOf(searchString,start)方法接收searchString和start两个参数,返回searchString第一次出现的位置,如果没有找到则返回-1;
同样地,该方法会隐式调用String()转型函数,将searchString非字符串值转换为字符串;隐式调用Number()转型函数,将start非数字值(undefined除外)转换为数值
searchString表示要搜索的子字符串;start表示该搜索的开始位置,若忽略该参数或该参数为undefined、NaN时,start = length - 1;若start为负数,start = 0;
var string = 'hello world world';
console.log(string.lastIndexOf('ld'));//15
console.log(string.lastIndexOf('ld',undefined));//15
console.log(string.lastIndexOf('ld',NaN));//15
console.log(string.lastIndexOf('ld',-1));//-1
console.log(string.lastIndexOf('h',-1));//0
console.log(string.lastIndexOf('w',undefined));//12
console.log(string.lastIndexOf('ld',10));//9
console.log(string.lastIndexOf('ld',[10]));//9
console.log(string.lastIndexOf('true',[10]));//-1
console.log(string.lastIndexOf(false,[10]));//-1
查找字符串中符合所有条件的字符串
可以循环调用indexOf()或者lastIndexOf();
//查找符号条件的字符串
function allIndex(str,value){
var resule =[];
var need = str.indexOf(value);
while(need > -1){
resule.push(need);
need = str.indexOf(value,need+value.length);
}
return resule;
}
console.log(allIndex('123455577889999','99'));
lastIndexOf()方法常用于获取URL地址中的扩展名
var url = 'http://cnblogs.com/xiaohuochai.txt';
function sliceURL(url){
var index = url.lastIndexOf('.');
return url.slice(index+1);
}
console.log(sliceURL(url));//txt
正则匹配方法
JavaScript中的一些正则操作如查找个测试等可以通过RegExp的方法实现,切分和替换另一些操作可以通过String实现,
String类共有match().search(),replace(),split()四种正则匹配方法。
match()
match()方法只接受一个正则或者是字符串的参数,并以数组的形式返回匹配的内容。若匹配失败,则match会返回null
'x'.match(/y/);//null
若不设置全局的话match和exec方法返回的结果相同。
var string = 'cat,bat,sat,fat';
var pattern = /.at/;
var matches = string.match(pattern);
console.log(matches);
(以下来自MDN)
返回的Array拥有额外的input属性,该属性包含被解析的原字符串。另外还有一个index属性,表示匹配字符在原字符串中的索引(以0开始)。为方便,也可以这样写
var string = 'cat,bat,sat,fat';
var pattern = /.at/;
var matches = string.match(pattern);
console.log(matches,matches.index,matches.input)
var string = 'cat,bat,sat,fat';
var pattern = /.at/;
var exec = pattern.exec(string);
console.log(exec);
设置全局标志后。exec方法依然返回单次的匹配结果,而match()方法会返回一个字符串数组,其中包括各次成功匹配的文本,但是没有index个input的属性
var string = 'cat,bat,sat,fat';
var pattern = /.at/g;
var matches = string.match(pattern);
console.log(matches,matches.index,matches.input);
//加了全局
var string = 'cat,bat,sat,fat';
var pattern = /.at/g;
var exec = pattern.exec(string);
console.log(exec);
match()方法作为字符串String的方法,接受参数为字符串,结果与不设置全局标志的正则表达式为参数相同,只返回第一个匹配项,具有index和input的属性。换个一目了然的写法
var string = 'cat,bat,sat,fat';
var matches = string.match('at');
console.log(matches,matches.index,matches.input);
当不设置全局标志时,match()方法和exec()方法都包含分组捕获信息;设置全局后,match()方法不包含捕获分组信息。
var string = 'cat,bat,sat,fat';
var pattern = /(.)at/g;
var matches = string.match(pattern);
console.log(matches);
var string = 'cat,bat,sat,fat';
var pattern = /(.)at/;
var exec = pattern.exec(string);
console.log(exec);
var string = 'cat,bat,sat,fat';
var pattern = /(.)at/g;
var exec = pattern.exec(string);
console.log(exec);
exec只能是返回第一个匹配结果,如果返回全部匹配的话用while调用
replace
replace方法是用于替换一个或者是多个字符串,它接受两个参数:第一个是正则表达式或者字符串,表示待查找的内容;第二个是字符串或者是正则表达式,表示替换的内容。返回替换后的字符串。
1:替换字符串,只能替换第一个字符串
var string = 'cat,bat,sat,fat';
var need = string.replace('at','kong');
console.log(need);
2:正则不设置全局的话也是只能替换第一个
var string = 'cat,bat,sat,fat';
var result = string.replace(/at/,'ond');
console.log(result);
var string = 'cat,bat,sat,fat';
var result = string.replace(/at/g,'ond');
console.log(result);
replace带我综合的研究下再整理,有些多,有些还不能理解。