Javascript方法拆分字符串外的花括号Regex

Javascript method to split string outside curly braces Regex

本文关键字:Regex 方法 拆分 字符串 Javascript      更新时间:2023-09-26

原始字符串是这样的"嗨,我的名字是{狗|猫}。嗨,我有个名字。|{问候|嗨{狗|猫}}"

如何到达:

  1. 你好,我的名字是{狗|猫}。
  2. 你好,我有名字了。
  3. {Gretings |嗨{狗|猫}}

使用正则表达式?

由于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);

也许我没听懂你的问题,但你的意思是这样的吗?

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?

---- EDIT ----

作为一个非常简单的版本,你可以这样做(去掉句号):

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