JavaScript围绕花括号分开

时间:2015-06-01 14:29:53

标签: javascript regex string split

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

"{0} Hello World {1}"

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

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

从我的努力中我得到的最好的是:

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

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

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

5 个答案:

答案 0 :(得分:5)

您可以使用Split with a regex having capturing group(s)

  

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

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

正则表达式解释:

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

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

  

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

不通过的数组元素   简单地跳过回调测试,并且不包括在新的中   阵列。

答案 1 :(得分:3)

您可以使用以下内容:

\s*({\d+})\s*

JS代码:



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




答案 2 :(得分:0)

你可以这样做:

var myregexp = /({.*?})(.*?)({.*?})/im;
var match = myregexp.exec(subject);
   if (match != null) 
   {
     result1 = match[1];
     result2 = match[2];
     result3 = match[3];
   }

答案 3 :(得分:0)

如果需要,您可以过滤掉空字符串:

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

返回

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

答案 4 :(得分:0)

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++;
    }
}

现在分裂会有你需要的东西。