JavaScript围绕花括号分开

Dan*_*993 6 javascript regex string split

我在字符串变量中有一个字符串格式:

"{0} Hello World {1}"
Run Code Online (Sandbox Code Playgroud)

我需要把它分成这样的东西:

"{0}","Hello World","{1}"
Run Code Online (Sandbox Code Playgroud)

从我所尝试的最好的我可以得到:

"","0"," Hello World ","1",""
Run Code Online (Sandbox Code Playgroud)

我试过转换Regex Split Around Curly Braces中的例子, 但它不起作用,那里的拆分要么删除了所有内容,要么保留空格并删除了{}.

所以,我的问题与其他文章中的问题相同,如何保留括号{}并删除空格之后和之前的空格?

kar*_*ala 5

您可以使用以下内容:

\s*({\d+})\s*
Run Code Online (Sandbox Code Playgroud)

JS代码:


Wik*_*żew 5

您可以使用Split具有捕获组的正则表达式:

如果separator是包含捕获括号的正则表达式,则每次匹配时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中.

var re = /\s*(\{[0-9]+\})\s*/g;
var splt = "{0} Hello World {1}".split(re).filter(Boolean);
alert(splt);
Run Code Online (Sandbox Code Playgroud)

正则表达式解释:

  • \s* - 任意数量的空格
  • (\{[0-9]+\}) - 匹配的捕获组:
    • \{ - 文字 {
    • [0-9]+ - 1位或更多位数
    • \} - 文字 }
  • \s* - 任意数量的空格

filter 可以帮助摆脱数组中的空元素.

filter()为数组中的每个元素调用一次提供的回调函数,并构造一个包含所有值的新数组,其中回调返回true值或强制转换为的值true.仅为已分配值的数组的索引调用回调; 对于已删除的索引或从未分配过值的索引,不会调用它.

不会通过回调测试的数组元素被简单地跳过,并且不包含在新数组中.