Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript使用两个特殊字符拆分复杂字符串_Javascript - Fatal编程技术网

使用javascript使用两个特殊字符拆分复杂字符串

使用javascript使用两个特殊字符拆分复杂字符串,javascript,Javascript,我使用Javascript已经有一段时间了,但这个问题确实引起了我的注意 我创建了一个程序,可以将玩家从一个字符串中分割成单独的名字 比如说 萨迪奥·马内(利物浦)、迪奥·巴尔德·凯塔(摩纳哥)、伊斯梅拉·萨尔(雷恩) 到 我创建了一个基本函数,用于拆分名称,并从数据库中获得一个数组,如下所示 var my_array = []; var club = []; var names = []; function splitData(data) {

我使用Javascript已经有一段时间了,但这个问题确实引起了我的注意

我创建了一个程序,可以将玩家从一个字符串中分割成单独的名字

比如说 萨迪奥·马内(利物浦)、迪奥·巴尔德·凯塔(摩纳哥)、伊斯梅拉·萨尔(雷恩)

我创建了一个基本函数,用于拆分名称,并从数据库中获得一个数组,如下所示

 var my_array = [];
        var club = [];
        var names = [];

        function splitData(data) {
            var spl = data.split(",");
            my_array.push(spl);

        }
但后来这根绳子出现了

法赫雷丁·本·优素福(沙特阿拉伯伊蒂法克)、萨伯·哈利法(非洲俱乐部)、瓦比·哈兹里(法国雷恩)

当我尝试拆分这种类型的字符串时,它会输出以下内容

    my_array = [Fakhreddine Ben Youssef, (Al Ittifaq, Saudi Arabia), Saber Khalifa (Club Africain), Wahbi Khazri , (Rennes, France)];

//which outputs

my_array[0]='Fakhreddine Ben Youssef';
my_array[1]='(Al Ittifaq';
my_array[2]='Saudi Arabia)';
my_array[3]='Saber Khalifa (Club Africain)';
my_array[4]='Wahbi Khazri' ;
my_array[5]='(Rennes';
my_array[6]='France)';

我认为问题是显而易见的,它也在括号中拆分逗号,如果它只是这个字符串,我会手动完成,但类似的方式有30多个字符串

下面是一些不依赖jQuery的代码:

function advsplit(input, separator) {
var tmp = '';
var output = [];
var bracketCount = 0;
for (var index in input) {
    var value = input[index];
    if (value == '(') bracketCount++;
    if (value == ')') bracketCount--;
    if (value == separator && bracketCount == 0) {
        output.push(tmp);
        tmp = '';
    } else tmp += value;
}
output.push(op);
return output;
}
要拆分字符串,您应该使用:
advslit('Fakhreddine Ben Youssef(沙特阿拉伯的艾蒂法克),Saber Khalifa(非洲俱乐部),Wahbi Khazri(法国的雷恩斯)',')

函数advsplit(输入,分隔符){
var tmp='';
var输出=[];
var bracketCount=0;
for(输入中的var索引){
var值=输入[指数];
如果(值=='(')方括号计数++;
如果(值=='))括号计数--;
if(值==分隔符和括号计数==0){
输出推送(tmp);
tmp='';
}否则tmp+=值;
}
输出推送(tmp);
返回输出;
}

console.log(advsplit('Fakhreddine Ben Youssef(沙特阿拉伯的Al Ittifaq)、Saber Khalifa(非洲俱乐部)、Wahbi Khazri(法国的雷恩)','))
您可以使用自己的常量语法定义正则表达式:

var reg = /[^\s,]([^\,(\)]+)(\s)*\([^\(\)]+\)/g;
var s=“Fakhreddine Ben Youssef(沙特阿拉伯伊蒂法克)、Saber Khalifa(非洲俱乐部)、Wahbi Khazri(法国雷恩)”;
var reg=/[^\s,]([^\,(\)]+)(\s)*\([^\(\)]+\)/g;

控制台日志(s.match(reg))
)分割,
而不是
@DragoşPaulMarinescu非常接近,但是看:
萨伯·哈利法(非洲俱乐部),瓦比·哈兹里,
,有些部分没有
),
你给出的例子确实包含
),
?按
)、
进行拆分,并向每个拆分项添加
字符应该可以正常工作。看起来可能是正则表达式的一个用例。在逗号上拆分,但忽略出现在一对Parenst中的逗号这听起来像是一个很好的例子,可以使用逗号以外的东西作为分隔符,或者实际上不将多个数据字段存储为单个字符串:可以忽略parens中的逗号,但似乎不可避免的是,最终你也会得到在括号外包含逗号的数据。
var reg = /[^\s,]([^\,(\)]+)(\s)*\([^\(\)]+\)/g;