原生js之字符串截取[通俗易懂]

原生js之字符串截取[通俗易懂]字符串截取的方法有三种:slice(start,end+1),substring(start,end+1),substr(start,n).slice(start,end+1):两个参数时,参数指截取位置,截取含头不含尾;一个参数时,默认截取到字符串结尾。参数可以为负数,负数就倒着数位置。substring(start,end+1):两个参数时,参数指截取位置,截取含头不含…

大家好,又见面了,我是你们的朋友全栈君。

字符串截取的方法有三种:

slice(start, end+1), substring(start, end+1), substr(start, n).
slice(start, end+1): 两个参数时,参数指截取位置,截取含头不含尾;一个参数时,默认截取到字符串结尾。参数可以为负数,负数就倒着数位置。
substring(start, end+1): 两个参数时,参数指截取位置,截取含头不含尾;一个参数时,默认及渠道字符串结尾。参数不可以为负数。
substr(start, n): 两个参数时,第一个参数指截取起始位置,第二个参数指截取字符个数;一个参数时,默认截取到字符串结尾。第一个参数可为负数,第二个不可为负数。
example:
var str = “今天是星期二”;
console.log(str.slice(3, 6)); // 截取“星期二”并打印
console.log(str.slice(3, -1)); // 截取“星期”并打印
console.log(str.slice(3,-3)); // 未截取任何信息,因为正着数第三位是“星”,倒着数第三位也是“星”,截取取头不取尾,头和尾重了,所以没有截取到任何信息。
console.log(str.slice(-2, -3)); // 同理因为倒数第二位是“期”,倒数第三位是“星”,不能反着截取,所以没有截取到任何信息。
console.log(str.substring(3,6)); // 截取“星期二”并打印
console.log(str.substr(3, 3)); // 截取“星期二”并打印
console.log(str.substr(-1, 3)); //截取“二”并打印。因为倒着数第一位是“二”,虽然此时要截取的长度是3,但是因为只有一位,所以只能截取一位。

但是如果不知道要截取的字符在字符串中的位置,可以使用indexOf()方法搜索到字符在字符串的起始位置,如果省略第二个参数,默认起始位置为下标0。
var str = “今天是星期二”;
var i = str.indexOf(“星”);
console.log(str.substring(i, i+4)); // 截取“星期二”并打印

原生js的字符串截取

可是原生js中并不是一般直接用slice、substring、substr就可以了,先看一下原生js实现字符串长度截取的代码:

function cutstr(str, len) { 
   
     var temp;  // 定义新的字符来存放每次截取的字符
     var icount = 0; // 定义变量来记录已经截取的字符串的长度
     var patrn = /[^\x00-\xff]/; // 正则判断字符是否匹配非单字节的字符(例如汉字、汉字符号,单字节字符包含英文字母、数字、英文符号等。)
     var strre = " ";
     for(var i = 0; i < str.length; i++) { 
   
        if(icount < len) { 
    //看了很多博客写的这里是icount < len - 1, 但是觉得是不对的,应该是icount < len, 如不正确,请指正!
            temp = str.substr(i, 1);
            if(patrn.exec(temp) == null) { 
   
                icount += 1; //如果是单字节字符,则长度+1;
            } else { 
   
                icount += 2; //如果是双字节字符,则长度+2;
            }
            strre += temp;
        } else { 
   
            break;
        }
     }
     return strre;   
}

可以看到代码中通过正则匹配来判断字符是否匹配非单字节的字符,这是因为并不是所有的字符串都只包含单字节字符,也会包含汉字等双字节字符。
如果没有正则匹配,
cutstr("我ABC汉DEF", 6); //输出的是“我ABC+汉的半个”
加上正则匹配后,
cutstr("我ABC汉DEF", 6); //输出的是“我ABC”

参考
前端学习笔记之九——原生JavaScript实现字符串截取
分享原生JavaScript技巧大收集(1~10)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141833.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号