我在字符串变量中有一个字符串格式:
"{0} Hello World {1}"
我需要把它分成这样的东西:
"{0}","Hello World","{1}"
从我的努力中我得到的最好的是:
"","0"," Hello World ","1",""
我尝试过转换Regex Split Around Curly Braces中的示例
但它不起作用,那里的拆分要么删除了所有内容,要么保留空格并删除{}
。
所以,我的问题与其他文章中的问题相同,如何保留大括号{}
并删除空格之后和之前的空格?
答案 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++;
}
}
现在分裂会有你需要的东西。