- str.length返回字符串长度
- str.charAt();返回某个位置的字符
- str.indexOf();某个字符第一次出现的索引
- str.slice();开始到结束(不包含)索引,没有第二个参数表示从开始到最后
- str.substr();开始,长度
- str.substring();开始,结束
- str.split();按拆分内容形成数组,在里面也可以用正则
param1 | param2 | param1为负数 | param2为负数 | param2不存在 | |
slice | start | end (不包含) | +length | +length | start到最后 |
substr | start | length | +length | 0 | start到最后 |
substring | start | end (不包含) 首先比较param1和param2的大小然后小在前,大在后 | 0 | 0 | start到最后 |
var str="abcdefg";
console.log(str.charAt(1));//参数是数字
console.log(str.indexOf("a"));
console.log(str.slice(0,1));
console.log(str.slice(0,-3));
console.log(str.slice(0));
console.log(str.substr(0,5));
console.log(str.substr(0,-5));
console.log(str.substr(1));
console.log(str.substring(1,0));
console.log(str.substring(1,-1));
运行结果:
有关于字符串方法使用正则:
- match方法:
- stingObj.match(value):该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
- stringObject.match(regexp):返回存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
let str="hello world";
console.log(str.match(/o/))
无 g:和reg.exec(str)返回一样: (上为exec 下为match):返回一个数组,第一项是首次匹配的字符串内容(注意无g的情况下,第一次匹配成功了就不往下做匹配了),第二项是index...,所以我们用的时候就一般用匹配结果的第一项。
有g:普通数组:
同时,需要明确match方法使用分组和不适用分组的时候也有区别:
- split()方法:注意split中的正则有和match中相反的一个意思,比如说按空格分成数组:
//split
str.split(/\s/g);
//match
str.match(/[\S]+/g);
此处正好总结一下正则里面:() {} []的区别:
正则表达式(括号)、[中括号]、{大括号}的区别小结
():分组,str.replace中会用的比较多
[]:定义匹配的字符范围
{}:表示匹配的长度
- replace方法:js字符串方法replace()的第二个参数为函数讲解
stringobject.replace(regexp/substr,replacement)
其中regexp/substr必需。规定字符串或要替换的模式的regexp对象。(请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 regexp 对象。) replacement必需。一个字符串值。规定了替换文本或生成替换文本的函数。最后返回一个新的字符串,是用replacement替换了regexp的第一次匹配或所有匹配之后得到的。
ECMAScript规定,replace()方法的参数replacement可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将替换文本使用。第一批参数表示匹配到的字符(有可能不止一个),第二批参数表示匹配到的字符最小索引位置(RegExp.index),第三个参数表示被匹配的字符串(RegExp.input)。
(function (window) {
function fn(str) {
this.str = str;
}
fn.prototype.format = function () {
// var arg = Array.from(arguments);
var arg=Array.prototype.slice.call(arguments)
return this.str.replace(/\{(\d+)\}/g, function (a, b) {
console.log(a)
return arg[b] || '';
});
}
window.fn = fn;
})(window);
// use
(function(){
var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');
console.log( t.format('http://www.alibaba.com', 'Alibaba', 'Welcome') );
})();
另一个例子:驼峰转换
/**
* _test_you_are_idiot==>__testYouAreIdiot
* 注意点1:有可能有多个_所以要_+表示大于等于1
* 注意点2:是否是第一个匹配的问题,因此会用到第二个参数
*/
const toCamelCaseVar = (variable) => /* TODO */
{
return variable.replace(/_+[a-zA-Z]/g,(my, idx) => {
console.log(my)
console.log(idx)
console.log(my.match(/[a-zA-Z]/)[0])
if(idx) return (my.match(/[a-zA-Z]/)[0].toUpperCase());
else return my;
})
}
console.log(toCamelCaseVar('__this_m__y__'))
正则部分的知识点请移步我的:JavaScript正则