Javascript方法将字符串拆分为花括号外的正则表达式

时间:2014-03-28 11:51:39

标签: javascript regex split

原始字符串是这样的 “嗨,我的名字是{dog | cat}。|嗨我有一个名字。| {Gretings |嗨{dog | cat}}”

我怎样才能得到:

  1. 你叫我的名字是{dog | cat}。
  2. 嗨,我有一个名字。
  3. {Gretings | Hi {dog | cat}}
  4. 使用正则表达式?

2 个答案:

答案 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);