HOWTO · JavaScript
在 JavaScript 中用破折号替换空格
这篇文章介绍了如何使用 replaceAll() 和 replace() 方法在 JavaScript 中用破折号替换空格。
本页内容
JavaScript 字符串不可变:replaceAll() 和 replace() 都会返回新字符串,不会改变原字符串。使用 replaceAll(' ', '-') 可将每个普通空格替换为连字符;只想替换第一个普通空格时,使用 replace(' ', '-')。下面的示例使用 console.log() 显示结果,可在 JavaScript 环境中运行查看。示例中的字符串和显示结果均保留英文。
将字面空格替换为 replaceAll()
字符串搜索模式按字面内容匹配,因此 ' ' 表示一个普通空格,而不是正则表达式。如果要将每个普通空格都替换为连字符,这是直接的做法。原字符串仍然保留,之后需要时可以继续使用。
运行此示例。示例中的字符串和显示结果均保留英文:
本节中的代码以及显示的标签或输出仍为英文。
const phrase = 'Hello World! Welcome to my blog post.';
const dashed = phrase.replaceAll(' ', '-');
console.log(dashed);
Hello-World!-Welcome-to-my-blog-post.
如果还要处理其他空白字符,可以使用全局正则表达式,例如 /\s/g。模式 \s 除普通空格外,还能匹配制表符和换行符等空白字符。当 replaceAll() 的搜索模式是 RegExp 时,必须带有 g 标志;否则调用会抛出 TypeError。字符串模式没有标志,会按字面内容匹配。
const text = 'Hello\tWorld! Welcome\nto my blog post.';
const dashedWhitespace = text.replaceAll(/\s/g, '-');
console.log(dashedWhitespace);
Hello-World!-Welcome-to-my-blog-post.
如果替换文本需要根据每次匹配的内容而变化,也可以使用函数。对于简单的空格替换为连字符,使用字符串作为替换值更清晰。这两种形式都会生成新字符串,而不会修改原字符串。
如需了解更多信息,请参阅 MDN 的 replaceAll() 文档。
将字面空格替换为 replace()
当搜索模式是字符串时,replace() 只会替换首次出现的内容。因此,如果你只想更改第一个分隔符并保留后面的空格,这种方法很实用。
运行此示例。示例中的字符串和显示结果均保留英文:
本节中的代码以及显示的标签或输出仍为英文。
const phrase = 'Hello World! Welcome to my blog post.';
const firstOnly = phrase.replace(' ', '-');
console.log(firstOnly);
Hello-World! Welcome to my blog post.
要用 replace() 替换每个普通空格,可以使用全局正则表达式 / /g。该模式包含一个字面空格,g 标志会让 replace() 继续匹配所有符合项。replace() 也接受不带 g 的 RegExp;此时只替换首次匹配,不会抛出 TypeError。
const phrase = 'Hello World! Welcome to my blog post.';
const everySpace = phrase.replace(/ /g, '-');
console.log(everySpace);
Hello-World!-Welcome-to-my-blog-post.
与 replaceAll() 一样,模式 /\s/g 可以匹配普通空格以外的空白字符。请根据输入中需要替换的字符来选择模式。如需了解 replace() 的搜索和替换行为,请参阅 MDN 文档。
如何选择 replace() 或 replaceAll()
如果想用字符串模式替换所有字面普通空格,请选择 replaceAll(' ', '-')。如果只想替换第一个字面普通空格,请选择 replace(' ', '-')。使用 replace() 替换所有普通空格时,可以使用 / /g。如果还要处理制表符或换行符,可将 /\s/g 与任一方法搭配使用。
两种方法对 RegExp 标志的要求不同:replaceAll() 要求使用全局 RegExp,而 replace() 接受全局或非全局 RegExp。任一方法搭配全局 RegExp 时都会替换所有匹配项;搭配非全局 RegExp 时则只替换首次匹配。搜索模式是字符串还是 RegExp 也会影响匹配方式:' ' 按字面匹配普通空格,而 /\s/g 匹配范围更广的空白字符。请根据预期的替换次数和需要处理的字符来选择方法与模式。