Javascript 如何使用正则表达式按{}拆分字符串

Javascript 如何使用正则表达式按{}拆分字符串,javascript,regex,Javascript,Regex,如何使用正则表达式拆分此字符串并将结果保存在类似 var string = '{user: Jack}{user: Dave}{user: John}{user: Hou}'; 如果只是对某些字符串(不是JSON)的测试,请使用以下regexp: ['{user: Jack}','{user: Dave}','{user: John}','{user: Hou}'] ? 如果{}中没有嵌套的{},请重试 var string='{user:Jack}{user:Dave}{user:Joh

如何使用正则表达式拆分此字符串并将结果保存在类似

var string = '{user: Jack}{user: Dave}{user: John}{user: Hou}';

如果只是对某些字符串(不是JSON)的测试,请使用以下regexp:

['{user: Jack}','{user: Dave}','{user: John}','{user: Hou}'] ?

如果
{}
中没有嵌套的
{}
,请重试

var string='{user:Jack}{user:Dave}{user:John}{user:Hou}';
var输出=string.split(“}{”).map(函数(val,index,arr){
如果(索引==0)
{
如果(arr.length>0)
{
val+=“}”;
}
} 
else if(索引==arr.length-1)
{
val=“{”+val;
} 
其他的
{
val=“{”+val+“}”;
}
返回val;
});

document.body.innerHTML+=JSON.stringify(输出,0,4);
或仅使用前瞻:

var string = '{user: Jack}{user: Dave}{user: John}{user: Hou}',
    re = /\{\w+?:\s?\w+?\}/g;

console.log(string.match(re));
// ["{user: Jack}", "{user: Dave}", "{user: John}", "{user: Hou}"]
var string='{user:Jack}{user:Dave}{user:John}{user:Hou}';

document.write(string.split(/(?=\{)/);
在此
regex上拆分

var arr = string.split(/(?=\{)/);
JS代码

var string='{user:Jack}{user:Dave}{user:John}{user:Hou}';

document.write(string.split(/(?=(!^){)/);
您可以将该表达式用作的参数

这会让事情变成这样:

\{(.*?)\}
它会给你一个你想要的数组。
如果您必须经常使用正则表达式,您可以使用这个很酷的正则表达式测试工具:

为什么不使用JSON呢?是否将{}嵌套在{}中?是否有理由使\w匹配项不贪婪?因为它的工作方式不相同。@AntonHarald,这称为正则表达式优化(如果您不知道的话).我认为这没什么区别。我在测试中看不到性能提升。但也许你想让我相信相反的情况。@AntonHarald,“我看不到性能提升”-你可以告诉我,在你用不带reedy运算符和不带它们的运算符呈现测量结果后,性能会有什么变化。你看不到区别吗?如果字符串长得多怎么办?嘿,我只是好奇。这听起来并不是冒犯性的…也许不是最专业的测试结果报告。但是,我该怎么做呢d我做得更好?目前,我在node.js中对此进行了计时:time-long for loop-time。使用非贪婪运算符,我从来没有得到过更好的结果。在我看来,字符串越长,贪婪运算符的执行效果越好。试图理解你对正字符串的负面展望。你能提供一个例子吗s是必需的?@AntonHarald不是必需的,但我想确保它不会在
{
处于starting@AntonHarald检查:-如果未使用负前瞻,则也将从开始进行拆分(可能是)…尝试不使用负前瞻,我明白了。好的,“a”。拆分(“^”);//[“a”],所以我认为一开始拆分并没有那么糟糕。我明白了。thx。@AntonHarald我并不是想让它复杂化。我假设如果拆分可以完成,如果我不使用负前瞻,那么它会先拆分任何东西,这是无效的。非常感谢
\{(.*?)\}
var str = '{user: Jack}{user: Dave}{user: John}{user: Hou}';
var res = str.match(/\{(.*?)\}/g);