JavaScript 围绕花括号进行分割

7

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

"{0} Hello World {1}"

我需要将它分成类似以下的形式:
"{0}","Hello World","{1}"

根据我的实际尝试,我所得到的最佳结果是:

"","0"," Hello World ","1",""

我尝试了将来自Regex Split Around Curly Braces的示例进行转换,但它并没有起作用,分割要么删除了所有内容,要么保留了空格并删除了 {}

因此,我的问题与另一篇文章中的问题相同,如何保留大括号 {} 并在它们之前和之后删除空格,而不是在单词之间?


1
分割 /({\d+})/。() 强制 JavaScript 返回你要拆分的内容作为拆分数据的一部分。 - Marc B
5个回答

7

您可以使用带有捕获组的正则表达式来使用split方法:

如果分隔符是一个包含捕获括号的正则表达式,则每次匹配到分隔符时,捕获括号的结果(包括任何未定义的结果)都将被拼接到输出数组中。

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

正则表达式解释:

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

filter 可以帮助清除数组中的空元素。

filter() 方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。

callback 函数被调用时传入三个参数:元素值,元素的索引,原数组。callback 函数返回 true 表示该元素通过测试,保留该元素,false 则不保留。callback 只会在有值的索引上被调用;那些从来没被赋过值或者使用 delete 删除的索引则不会被调用。

未通过测试的数组元素会被跳过,不会被包含在新数组中。


1
哇喔 :D 非常感谢!完美运行 :D - Danielok1993

5
您可以使用以下内容:
\s*({\d+})\s*

JS 代码:

var regex = /\s*({\d+})\s*/g;
var split_string = "{0} Hello World {1}".split(regex).filter(Boolean);
alert(split_string);


0
你可以这样做:
var myregexp = /({.*?})(.*?)({.*?})/im;
var match = myregexp.exec(subject);
   if (match != null) 
   {
     result1 = match[1];
     result2 = match[2];
     result3 = match[3];
   }

0

如果你想的话,可以过滤掉空字符串:

var s = "{0} Hello World {1}";
s.split(/({\d+})/).filter(Boolean);

返回

["{0}", " Hello World ", "{1}"]

-1
var myString = "{0} Hello World {1}"
var splits = myString.split(/\s?{\d}\s?/);

将返回["","Hello World",""],

var count = 0;
for (var i=0; i< splits.length; i++) {
    if (splits[i] === "") {
        splits[i] = "{" + count + "}";
        count++;
    }
}

现在分割将会有你所需要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接