JS 【详解】字符串(含模板字符串、转义字符、常用字符串API汇总、常用字符串操作详解、获取字符串的三种长度、Unicode 编码转字符、字符串转为html 、使用 Lodash 等)

let str = "字符串的内容"
  • 用单引号/双引号包裹
  • 以字符数组的形式保存,字符串"ab"在底层是以 [“a”, “b”] 的形式保存。

模板字符串 ``

ES6 新增语法

  • 用反引号包裹

  • 变量、表达式、函数写在 ${}

let score = 100
console.log(`考试得了${score}`) // 考试得了100 分

转义字符

字符名称转义写法功能 / 范例
单引号\'I don’t know
双引号\"“Hello”, he said
反斜杠\\1\2
回车符\r将当前位置移到本行开头
换行符\n将当前位置移到下一行开头
换页符\f将当前位置移到下一页开头
水平制表符\t按下键盘TAB键效果
垂直制表符\v\v 后面的字符从下一行开始输出,且开始的列数为 \v 前一个字符所在列后面一列。
退格符\b将当前位置移到前一列
Unicode 标识符\u\u 后面的字符将会被视为Unicode码

常用 API

全无副作用 : 都不会改变原字符串

API名称功能参数返回值副作用
trim去除字符串前后的空字符新字符串
replace替换字符串指定内容匹配规则,替换的字符串新字符串
concat字符串拼接拼接的字符串新字符串
repeat重复字符串重复次数新字符串
toUpperCase字符串大写新字符串
toLowerCase字符串小写新字符串
charAt获取指定位置的字符
功能同 [ ]
下标指定位置的字符
includes是否包含指定字符串目标字符串true/false
indexOf获取指定字符串下标目标字符串下标/-1
lastIndexOf获取指定字符串下标
从后向前搜索
目标字符串下标/-1
startsWith是否以指定字符串开头目标字符串true/false
endsWith是否以指定字符串结尾目标字符串true/false
substring字符串截取起始下标,终点下标截取后的字符串
slice字符串截取
与 substring 的区别见下文
起始下标,终点下标截取后的字符串
split字符串分割分割符,最大长度分割后的数组

常用字符串操作【详解】

遍历字符串 for of

for(let char of string){
	console.log("字符:"+char);
}

字符串替换 replace

replace(匹配目标字符串的规则,新字符串)
// 将第 1 个 1 替换为 4
let result = "1 1 3".replace("1", "4");

通常配合正则表达式使用

// 去除字符串内所有的空格
let result = "1 2 3".replace(/\s*/g, "");

字符串拼接(三种方式)

let str1 = "EC编程";
let str2 = "俱乐部";

方式1:模板字符串

let result = `${str1}${str2}`;

方式2:+

let result = str1 + str2;

方式3:concat

let result = str1.concat(str2);

【实战】字符串中加换行

let str = 你好'+"\n"+ '世界';

html中是会被识别为"你好\n世界",要实现换行,还需添加样式:

"white-space":"pre"

字符串搜索

查询指定字符/字符串是否存在 includes

第一个参数是目标字符串

"123".includes("3") // true

第二个参数是搜索起点的下标

"123".includes("3", 3) // false

获取指定字符/字符串的下标 indexOf / lastIndexOf

第一个参数是目标字符串

"123".indexOf("3") // 2

第二个参数是搜索起点的下标

"123".indexOf("3", 3); // -1

未搜索到返回 -1

lastIndexOf 从后向前搜索

正则搜索 search()、match()

https://blog.csdn.net/weixin_41192489/article/details/113618913

【实战】不区分大小写的搜索

目标字符串和被搜索的字符串都变为小写再搜索

str.toLowerCase().indexOf('A'.toLowerCase());

【实战】获取指定字符的所有下标

// 字符串获取指定字符的所有下标
export function getIndexList(string, char) {
  let arr = [];
  let index = -1;
  do {
    index = string.indexOf(char, index + 1);
    if (index != -1) {
      arr.push(index);
    }
  } while (index != -1);
  if (arr.length > 0) {
    return arr;
  } else {
    return -1;
  }
}

字符串截取 substring / slice

  • 第一个参数指定是区间的起始位置(含头)

  • 第二个参数指定是区间的末端位置,而不是该区间的长度。(不含尾)

"123".substring(1, 2); // 2

substring 和 slice 的区别

  • substring 将负值视为0,传参 (1,-1) 效果为substring(1,0)
  • slice 将负值与字符串的长度相加,传参 (1,-1) 效果为 slice(1,s.length-1)

字符串分割 split

  • 第一个参数:字符串/正则表达式
  • 第二个参数:指定返回的数组的最大长度
// 无参数,表示:把字符串作为一个元素添加到数组中。
"1,2".split() // [ '1,2' ]
"1,2".split(","); // [ '1', '2' ]
// 正则 /\s*/ 匹配0个或多个空格
"1  2 34".split(/\s*/); // [ '1', '2', '3', '4' ]

【实战】获取字符串的长度

获取字符串的字符数

123.length // 3

获取字符串的存储长度

英文占一个字符位,其他字符占两个字符位

function getZFWlength(string) {
        var count = 0;
        for (var i = 0; i < string.length; i++) {
            //对每一位字符串进行判断,如果Unicode编码在0-127,计数器+1;否则+2
            if (string.charCodeAt(i) < 128 && string.charCodeAt(i) >= 0) {
                count++;
            } else {
                count += 2;
            }
        }
}

获取字符串的像素长度(显示宽度)

字符串的显示宽度和 css 的 fontSize,fontFamily有关。
计算思路:创建一个用span包裹的字符串标签,其 window.getComputedStyle的计算值 - offsetWidth 即字符串在页面中的显示宽度

若计算像素高度,原理相同,见注释部分

    // 获取字符串的像素宽度
    function getPXwidth(str, fontSize = "12px", fontFamily = "Microsoft YaHei") {
        var span = document.createElement("span");
        var result = {};
        result.width = span.offsetWidth;
        result.height = span.offsetHeight;
        span.style.visibility = "hidden";
        span.style.fontSize = fontSize;
        span.style.fontFamily = fontFamily;
        span.style.display = "inline-block";
        document.body.appendChild(span);
        if (typeof span.textContent != "undefined") {
            span.textContent = str;
        } else {
            span.innerText = str;
        }
        result.width = parseFloat(window.getComputedStyle(span).width) - result.width;
        // 字符串的显示高度
        // result.height = parseFloat(window.getComputedStyle(span).height) - result.height;
        return result.width;
    }

【实战】Unicode 编码转字符

String.fromCharCode(72);  // H

【实战】字符串转为html

let str = "你好";

console.log(str.anchor())
console.log(str.big())
console.log(str.sub())
console.log(str.sup())
console.log(str.link("http://www.baidu.com"));
console.log(str.bold())

结果

<a name="undefined">你好</a>
<big>你好</big>
<sub>你好</sub>
<sup>你好</sup>
<a href="http://www.baidu.com">你好</a>

【实战】使用 Lodash

https://www.lodashjs.com/docs

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝阳39

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值