原始字符串是这样的 “嗨,我的名字是{dog | cat}。|嗨我有一个名字。| {Gretings |嗨{dog | cat}}”
我怎样才能得到:
使用正则表达式?
答案 0 :(得分:1)
由于javascript正则表达式无法处理嵌套结构(此处为大括号),因此必须使用其他方法。
示例:
var str = "Hi my name is {dog|cat}.|Hi I have a name.|{Gretings|Hi {dog|cat}}";
var parts = str.split(/([{}|])/);
var flag = 0;
var results = Array();
var tmp = '';
for (var i = 0; i<parts.length; i++) {
switch(parts[i]) {
case '{': flag++; tmp +=parts[i]; break;
case '}': (flag)&&flag--; tmp +=parts[i]; break;
case '|': if (flag==0) {
results.push(tmp);
tmp='';
break; }
default: tmp +=parts[i];
}
}
results.push(tmp);
console.log(results);
答案 1 :(得分:0)
也许我无法得到这个问题,但你的意思是这样的:
var str = "Hi my name is {dog|cat}.|Hi I have a name.|{Gretings|Hi {dog|cat}}";
console.info(str.split("|"))
返回一个数组
["Hi my name is {dog", "cat}.", "Hi I have a name.", "{Gretings", "Hi {dog", "cat}}"]
但是使用RegExp?
----编辑----
作为一个非常简单的版本,你可以这样做(失去最后一个):
var str = "Hi my name is {dog|cat}.|Hi I have a name.|{Gretings|Hi {dog|cat}}";
var pattern = /[.][|]/;
var re = new RegExp(pattern);
var result = str.split(re);
//var result = str.split(new RegExp(/[.][|]/));
console.info('your result: ', result);