获取 JavaScript 中特定字符后的子字符串
获取特定字符后的子字符串:
- 使用
String.indexOf()
方法获取字符在字符串中的索引。 - 使用
String.slice()
方法获取特定字符后的子字符串。
const str = 'abc fql_zadmei.com';
const after_ = str.slice(str.indexOf('_') + 1);
console.log(after_); // 👉️ "zadmei.com"
String.slice()
方法提取字符串的一部分并将其返回,而不修改原始字符串。
String.slice()
方法采用以下参数:
- start 索引要包含在返回的子字符串中的第一个字符的索引
- end 索引要从返回的子字符串中排除的第一个字符的索引
当只有一个参数被传递给 String.slice()
方法时,切片会到达字符串的末尾。
const str = 'abc fql_zadmei.com';
console.log(str.slice(10)); // 👉️ zadmei.com
我们使用 String.indexOf
方法获取特定字符第一次出现的索引。
const str = 'abc fql_zadmei.com';
console.log(str.indexOf('_')); // 👉️ 7
console.log(str.indexOf('_') + 1); // 👉️ 8
我们将 1 添加到调用 indexOf()
的结果中,因为我们不想在新字符串中包含该字符。
如果字符串不包含指定字符,则 indexOf()
方法返回 -1。
const str = 'abc fql_zadmei.com';
const result = str.slice(str.indexOf('@') + 1);
console.log(result); // 👉️ abc fql_zadmei.com
如果字符不包含在字符串中,则返回整个字符串。
JavaScript 索引是从零开始的,因此字符串中第一个字符的索引为 0,最后一个字符的索引为
str.length - 1
。 定义一个可重用的函数#
如果我们必须经常这样做,请定义一个可重用的函数。
function afterCharacter(string, char) {
return string.slice(str.indexOf(char) + 1);
}
const str = 'abc fql_zadmei.com';
// 👇️ zadmei.com
console.log(afterCharacter(str, '_'));
// 👇️ fql_zadmei.com
console.log(afterCharacter(str, ' '));
afterCharacter
函数接受一个字符串和一个字符作为参数,返回指定字符之后的字符串部分。
或者,我们可以使用 str.split()
方法。
使用 String.split() 获取特定字符后的子字符串
获取特定字符后的子字符串:
- 使用 split() 方法在字符上拆分字符串。
- 访问索引为 1 的字符串数组。
- 数组中的第一个元素是字符之后的子字符串。
const str = 'abc fql_zadmei.com';
const after_ = str.split('_')[1];
console.log(after_); // 👉️ zadmei.com
我们使用 String.split()
方法在每次出现下划线时拆分字符串。
const str = 'abc bobby_hadz.com';
// 👇️ [ 'abc bobby', 'hadz.com' ]
console.log(str.split('_'));
数组中的第二个元素是指定字符(示例中的下划线)之后的子字符串。
处理字符不在字符串中的场景
如果在字符串中找不到分隔符,则 split()
方法返回一个仅包含 1 个元素的数组,该元素由整个字符串组成。
const str = 'abc fql_zadmei.com';
// 👇️ [ 'abc fql_zadmei.com' ]
console.log(str.split('@'));
如果我们访问数组中的第二个元素,我们将得到一个未定义的值。
处理此问题的一种方法是,如果未找到分隔符,则使用逻辑 OR ||
运算符返回整个字符串。
const str = 'abc fql_zadmei.com';
const after_ = str.split('@')[1] || str;
console.log(after_); // 👉️ abc fql_zadmei.com
我们使用逻辑 OR ||
运算符来提供后备值,以防运算符左侧的值是假的(例如未定义)。
如果分隔符不包含在字符串中,则表达式返回整个字符串。
定义一个使用 split() 的可重用函数
如果我们必须经常这样做,请定义一个可重用的函数。
function afterCharacter(string, char) {
return string.split(char)[1] || string;
}
const str = 'abc fql_zadmei.com';
// 👇️ zadmei.com
console.log(afterCharacter(str, '_'));
// 👇️ fql_zadmei.com
console.log(afterCharacter(str, ' '));
// 👇️ abc fql_zadmei.com
console.log(afterCharacter(str, '#'));
该函数接受一个字符串和一个字符作为参数,返回指定字符之后的字符串部分。
我们还可以使用 Array.pop()
方法代替字符串索引。
const str = 'abc fql_zadmei.com';
const after_ = str.split('_').pop();
console.log(after_); // 👉️ zadmei.com
我们使用 String.split()
方法在字符上拆分字符串。
const str = 'abc fql_zadmei.com';
console.log(str.split('_')); // 👉️ [ 'abc fql', 'zadmei.com' ]
最后一步是使用 Array.pop()
方法获取数组的最后一个元素。
Array.pop()
方法移除并返回最后一个数组元素。
如果字符串包含多次出现的字符,请不要使用 split()
请注意
,如果字符串包含多次出现的字符,则不应使用String.split()
方法。
const str = 'A very_long_string';
// 👇️ [ 'A very', 'long', 'string' ]
console.log(str.split('_'));
const after_ = str.split('_').pop();
console.log(after_); // 👉️ string
String.split()
方法在所有出现的字符处拆分字符串,因此访问最后一个数组元素不再是一个选项。
在这种情况下,我们应该使用前面副标题中所示的 String.slice()
方法。
const str = 'abc fql_zadmei.com';
const after_ = str.slice(str.indexOf('_') + 1);
console.log(after_); // 👉️ "zadmei.com"
indexOf()
方法返回字符第一次出现的索引,我们使用 String.slice()
方法获取字符之后的字符串切片。