按 {0}、{1}...{n} 拆分字符串并替换为空字符串

Splitting string by {0}, {1}...{n} and replace with empty string

我有以下字符串:

var text = "Hello world! My name is {0}. How {1} can you be?"

我想找到每个 {n} 并将它们替换为空字符串。我对正则表达式完全没用并试过这个:

text = text.split("/^\{\d+\}$/").join("");

我确定这是一个简单的答案,并且可能已经存在一些关于 SO 的答案,但我不确定要搜索什么。甚至不知道“{”在英语里叫什么。

请(如果可能)继续使用 "split" 和 "join"。

谢谢!

您可以通过 string.replace 函数实现。

string.replace(/\{\d+\}/g, "")

示例:

> var text = "Hello world! My name is {0}. How {1} can you be?"
undefined
> text.replace(/\{\d+\}/g, "")
'Hello world! My name is . How  can you be?'

通过string.split。你只需要移除锚点。 ^ 断言我们在起点,$ 断言我们在终点。因为单行中不仅存在字符串 {num} ,所以您的正则表达式失败了。并删除正则表达式定界符 /

周围的引号
> text.split(/\{\d+\}/).join("");
'Hello world! My name is . How  can you be?'

你可以直接使用replace方法:

var repl = text.replace(/\{\d+\} */g, '');
//=> "Hello world! My name is . How can you be?"

你很接近。你想要的是:text = text.split(/\{\d+\}/).join("");

您错过的两件事是:

  1. ^ = 字符串的开头,$ = 字符串的结尾。由于您尝试匹配的模式周围还有其他字符,因此您不需要这些字符。
  2. 如果在 split() 方法中使用正则表达式,则需要使用 RegExp 对象,而不是字符串。删除 " 并让表达式以 / 开始和结束将定义一个 RegExp 对象。

我实际上同意其他人的观点,即 replace() 方法是完成您想要完成的事情的更好方法,但是如果您想使用 split()join(),正如您所说,这就是您需要的更改。