摘要:在本教程中,您将了解 JavaScript String
类型以及如何有效地操作字符串。
JavaScript 字符串类型的介绍
String
类型是 对象 对 字符串原始类型 的包装,可以通过使用 String
构造函数创建,如下所示
let str = new String('JavaScript String Type');
Code language: JavaScript (javascript)
String
类型有一个名为 length
的属性,它指定字符串中的字符数。
console.log(str.length); // 22
Code language: JavaScript (javascript)
在此示例中,length
属性的值为 22
,这也与字符串 'JavaScript String Type'
中的字符数相同。
要获取原始字符串值,可以使用 String 对象的以下方法之一:valueOf()
、toString()
和 toLocaleString()
。
console.log(str.valueOf());
console.log(str.toString());
console.log(str.toLocaleString());
Code language: CSS (css)
要访问字符串中的单个字符,可以使用带数值索引的方括号表示法 []
。第一个字符的索引为零,如本示例所示
console.log(str[0]); // J
Code language: JavaScript (javascript)
方括号表示法是在 ES5 中引入的。在 ES5 之前,使用 charAt()
方法,该方法比较冗长
console.log(str.charAt(0)); // J
Code language: JavaScript (javascript)
当您在原始字符串变量或文字字符串上调用方法时,它将转换为 String
类型的实例。例如
'literal string'.toUpperCase();
Code language: JavaScript (javascript)
此功能称为 JavaScript 中的原始包装类型。
字符串操作
String
类型提供了许多有用的方法,可以有效地操作字符串。我们将在下一节中逐一检查它们。
1) 连接字符串
要连接两个或多个字符串,请使用 concat()
方法,如下所示
let firstName = 'John';
let fullName = firstName.concat(' ','Doe');
console.log(fullName); // "John Doe"
console.log(firstName); // "John"
Code language: JavaScript (javascript)
concat()
方法连接两个或多个字符串并返回结果字符串。请注意,concat()
方法不会修改原始字符串。
除了 concat()
方法外,还可以使用加号运算符 (+
) 连接字符串。在实践中,加号运算符比 concat()
方法更常用。
let firstName = 'John';
let fullName = firstName + ' ' + 'Doe';
console.log(fullName); // "John Doe"
Code language: JavaScript (javascript)
2) 提取子字符串
要从字符串中提取子字符串,请使用 substr()
方法
substr(startIndex,[length]);
Code language: CSS (css)
substr()
方法接受两个参数。
第一个参数 startIndex
是提取字符的起始位置,而第二个参数 length
指定要提取的字符数。
let str = "JavaScript String";
console.log(str.substr(0, 10)); // "JavaScript"
console.log(str.substr(11,6)); // "String"
Code language: JavaScript (javascript)
如果省略 length
参数,substr()
方法将提取到字符串末尾的字符。
有时,您想使用起始和结束索引从字符串中提取子字符串。在这种情况下,可以使用 substring()
方法
substring(startIndex,endIndex)
请参见以下示例
let str = "JavaScript String";
console.log(str.substring(4, 10)); // "Script"
Code language: JavaScript (javascript)
3) 定位子字符串
要定位字符串中的子字符串,请使用 indexOf()
方法
string.indexOf(substring,[fromIndex]);
Code language: CSS (css)
indexOf()
方法接受两个参数:要定位的子字符串和方法开始在字符串中向前搜索的 fromIndex
。
indexOf()
返回字符串中子字符串第一次出现的索引。如果未找到子字符串,则 indexOf()
方法返回 -1
。
let str = "This is a string";
console.log(str.indexOf("is")); // 2
Code language: JavaScript (javascript)
以下示例使用 fromIndex
参数
console.log(str.indexOf('is', 3)); //5
Code language: JavaScript (javascript)
要查找字符串中子字符串最后一次出现的定位,请使用 lastIndexOf()
方法。
string.lastIndexOf(substring,[fromIndex])
Code language: CSS (css)
与 indexOf()
方法不同,lastindexOf()
方法从 fromIndex
参数向后搜索。
console.log(str.lastIndexOf('is')); // 5
Code language: JavaScript (javascript)
如果在字符串中未找到子字符串,则 lastIndexOf()
方法也返回 -1
,如本示例所示
console.log(str.lastIndexOf('are')); // -1
Code language: JavaScript (javascript)
4) 删除空白字符
要删除字符串中所有前导和尾随空白字符,请使用 trim()
方法。
let rawString = ' Hi ';
let strippedString = rawString.trim();
console.log(strippedString); // "Hi"
Code language: JavaScript (javascript)
请注意,trim()
方法会创建一个原始字符串的副本,其中空白字符已去除,它不会更改原始字符串。
ES6 引入了两种新方法,用于从字符串中删除空白字符
trimStart()
返回一个字符串,其中已从字符串开头删除了空白字符。trimEnd()
返回一个字符串,其中已从字符串末尾删除了空白字符。
5) 更改大小写
要更改字符串的大小写,请使用 toLowerCase()
和 toUpperCase()
方法
let greeting = 'Hello';
console.log(greeting.toLowerCase()); // 'hello'
console.log(greeting.toUpperCase()); // 'HELLO';
Code language: JavaScript (javascript)
在某些语言中,将字符串转换为小写和大写的规则非常具体。
因此,最好使用 toLocaleLowerCase()
和 toLocaleUpperCase()
方法,尤其是在您不知道代码将处理哪种语言时。
6) 比较字符串
要比较两个字符串,请使用 localeCompare()
方法
first.localeCompare(second);
Code language: CSS (css)
localeCompare()
返回三个值之一:-1、0 和 1。
- 如果第一个字符串在字母顺序上位于第二个字符串之前,则该方法返回 -1。
- 如果第一个字符串在字母顺序上位于第二个字符串之后,则该方法返回 1。
- 如果两个字符串相等,则该方法返回 0。
例如
console.log('A'.localeCompare('B')); // -1
console.log('B'.localeCompare('B')); // 0
console.log('C'.localeCompare('B')); // 1
Code language: JavaScript (javascript)
7) 匹配模式
match()
方法允许您将字符串与指定的 正则表达式 匹配并获取结果数组。
如果 match()
方法未找到任何匹配项,则返回 null。否则,它将返回一个数组,其中包含整个匹配项和任何括号捕获的匹配结果。
如果未设置全局标志 (g
),则数组的元素零包含整个匹配项。以下是一个示例
let expression = '1 + 2 = 3';
let matches = expression.match(/\d+/);
console.log(matches[0]); // "1"
Code language: JavaScript (javascript)
输出
1
在此示例中,模式与 expression
字符串中的任何数字匹配。
如果设置了全局标志 (g
),则结果数组的元素将包含所有匹配项,如下所示
let expression = '1 + 2 = 3';
let matches = expression.match(/\d+/g);
for (const match of matches) {
console.log(match);
}
Code language: JavaScript (javascript)
输出
1
2
3
在此示例中,matches
数组包含所有匹配项,包括 expression
字符串中的 1
、2
和 3
。
如果只需要找出字符串是否与正则表达式匹配,可以使用 search()
方法。
与 match()
方法类似,search()
方法接受一个正则表达式并返回找到第一个匹配项的字符串位置。如果没有找到匹配项,则返回 -1。
let str = "This is a test of search()";
let pos = str.search(/is/);
console.log(pos); // 2
Code language: JavaScript (javascript)
8) 替换子字符串
要替换字符串中的子字符串,请使用 replace()
方法。
string.replace(regularExpression, replaceText)
Code language: CSS (css)
replace()
方法的第一个参数可以是正则表达式或字符串。如果是正则表达式,则 replace()
方法将找到匹配项并将其替换为第二个参数 (replaceText
)。如果是字符串,则 replace()
方法将执行精确搜索并执行替换。
replace()
方法在进行替换后返回原始字符串的副本。
以下示例说明了如何使用 正则表达式 将 the
替换为 a
let str = "the baby kicks the ball";
// replace "the" with "a"
let newStr = str.replace(/the/g, "a");
console.log(newStr); // "a baby kicks a ball"
console.log(str); // "the baby kicks the ball"
Code language: JavaScript (javascript)
以下示例显示了如何使用第一个参数作为文字字符串将 kicks
替换为 holds
。
newStr = str.replace('kicks', 'holds');
console.log(newStr); // "the baby holds the ball"
Code language: JavaScript (javascript)
在本教程中,您已经了解了 JavaScript 字符串类型以及如何有效地操作字符串。