如何在 JavaScript 中使用多个分隔符拆分字符串?
我试图在逗号和空格上进行拆分,但 AFAIK JavaScript 的split()
函数仅支持一个分隔符。
如何在 JavaScript 中使用多个分隔符拆分字符串?
我试图在逗号和空格上进行拆分,但 AFAIK JavaScript 的split()
函数仅支持一个分隔符。
传入一个正则表达式作为参数:
js> "Hello awesome, world!".split(/[\s,]+/)
Hello,awesome,world!
编辑添加:
您可以通过选择数组的长度减 1 来获取最后一个元素:
>>> bits = "Hello awesome, world!".split(/[\s,]+/)
["Hello", "awesome", "world!"]
>>> bit = bits[bits.length - 1]
"world!"
...如果模式不匹配:
>>> bits = "Hello awesome, world!".split(/foo/)
["Hello awesome, world!"]
>>> bits[bits.length - 1]
"Hello awesome, world!"
您可以将正则表达式传递给 JavaScript 的split()方法。例如:
"1,2 3".split(/,| /)
["1", "2", "3"]
或者,如果您想允许多个分隔符一起仅作为一个分隔符:
"1, 2, , 3".split(/(?:,| )+/)
["1", "2", "3"]
(你必须使用非捕获(?:)
括号,否则它会被拼接回结果中。或者你可以像 Aaron 一样聪明并使用字符类。)
在 Safari 和 Firefox 中测试的示例。
另一种简单但有效的方法是反复使用split+join。
"a=b,c:d".split('=').join(',').split(':').join(',').split(',')
从本质上讲,先拆分后连接就像全局替换一样,因此这会用逗号替换每个分隔符,然后一旦所有分隔符都被替换,它就会对逗号进行最终拆分
上述表达式的结果是:
['a', 'b', 'c', 'd']
对此进行扩展,您还可以将其放在一个函数中:
function splitMulti(str, tokens){
var tempChar = tokens[0]; // We can use the first token as a temporary join character
for(var i = 1; i < tokens.length; i++){
str = str.split(tokens[i]).join(tempChar);
}
str = str.split(tempChar);
return str;
}
用法:
splitMulti('a=b,c:d', ['=', ',', ':']) // ["a", "b", "c", "d"]
如果您经常使用此功能,String.prototype.split
为了方便起见,甚至可能值得考虑包装 (我认为我的函数相当安全 - 唯一的考虑是条件(次要)的额外开销以及它缺少 limit 参数的实现这一事实如果传递数组)。
splitMulti
如果使用下面的这种方法简单地包装它,请确保包含该函数:)。还值得注意的是,有些人不赞成扩展内置插件(因为很多人做错了,可能会发生冲突)所以如果有疑问,请在使用它之前与更高级的人交谈或询问 SO :)
var splitOrig = String.prototype.split; // Maintain a reference to inbuilt fn
String.prototype.split = function (){
if(arguments[0].length > 0){
if(Object.prototype.toString.call(arguments[0]) == "[object Array]" ) { // Check if our separator is an array
return splitMulti(this, arguments[0]); // Call splitMulti
}
}
return splitOrig.apply(this, arguments); // Call original split maintaining context
};
用法:
var a = "a=b,c:d";
a.split(['=', ',', ':']); // ["a", "b", "c", "d"]
// Test to check that the built-in split still works (although our wrapper wouldn't work if it didn't as it depends on it :P)
a.split('='); // ["a", "b,c:d"]
享受!
让我们保持简单:(在您的 RegEx 中添加“[]+”意味着“1 或更多”)
这意味着“+”和“{1,}”是相同的。
var words = text.split(/[ .:;?!~,`"&|()<>{}\[\]\r\n/\\]+/); // note ' and - are kept
棘手的方法:
var s = "dasdnk asd, (naks) :d skldma";
var a = s.replace('(',' ').replace(')',' ').replace(',',' ').split(' ');
console.log(a);//["dasdnk", "asd", "naks", ":d", "skldma"]