我有一个这样的字符串:
var category = 'New & improved > crazy - whatever'
我想将其转换为:
var arr = ['New', 'improved', 'crazy', 'whatever']
应该使用' & ', ' - ' or ' > '
(包括空格)的任意组合。
到目前为止,我正在做:
var arr = [];
if(obj.categories[i].name.indexOf(" > ") >= 0){
var arr2 = obj.categories[i].name.split(" > ");
for(var i = 0; i<arr.length; i++){
if (arr[i].indexOf(' & ') >=0){
var newarr = arr[i].split(' & ');
arr.push(newarr);
}else{
arr.push(arr[i]);
}
}
}
if(obj.categories[i].name.indexOf(" - ") >= 0){
var arr2 = obj.categories[i].name.split(" - ");
for(var i = 0; i<arr.length; i++){
if (arr[i].indexOf(' & ') >=0){
var newarr = arr[i].split(' & ');
arr.push(newarr);
}else{
arr.push(arr[i]);
}
}
}else if(obj.categories[i].name.indexOf(" & ") >= 0){
var arr = obj.categories[i].name.split(" & ");
return arr;
}else{
return [obj.categories[i].name];
}
但如果字符串中有&符号和短划线,则不起作用。我觉得正则表达式无论如何都能更好地处理这个问题,实现这个目标的最佳方法是什么,并使其在不同的用例中具有相对的未来性(当然只涉及上述分隔符)?
答案 0 :(得分:3)
var category = 'New & improved > crazy - whatever';
category.split(/\s*[-&>]\s*/); // => ["New", "improved", "crazy", "whatever"]
注意:-
不应该在中间。否则它被解释为字符范围。
答案 1 :(得分:2)
尝试:
'New & improved > crazy - whatever'.split(/[>&-]/);
或结果中没有空格(但结果可能取决于初始字符串的格式):
'New & improved > crazy - whatever'.split(/\s+[>&-]\s+/);
答案 2 :(得分:0)
您可以使用:
var result = yourstring.split(/[\s>&-]+/);
print(result);
答案 3 :(得分:0)
var category = 'New & improved > crazy - whatever'
var arr = category.split(/[\&\>\-]/);