当前位置:  开发笔记 > 编程语言 > 正文

如何在javascript中拆分包含多个分隔符的字符串?

如何解决《如何在javascript中拆分包含多个分隔符的字符串?》经验,为你挑选了7个好方法。

如何在JavaScript中拆分包含多个分隔符的字符串?我试图在逗号和空格上分开但是,AFAIK,JS的分割功能只支持一个分隔符.



1> Aaron Maenpa..:

传入正则表达式作为参数:

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!"


rhino,Mozilla在Java中实现JavaScript:http://www.mozilla.org/rhino/(...或"sudo apt-get install rhino").
有没有办法避免在使用正则表达式拆分时删除分隔符?

2> Jesse Rusak..:

您可以将正则表达式传递给Javascript的拆分运算符.例如:

"1,2 3".split(/,| /) 
["1", "2", "3"]

或者,如果您希望允许多个分隔符一起仅作为一个:

"1, 2, , 3".split(/(?:,| )+/) 
["1", "2", "3"]

(你必须使用非捕获(?:) parens,否则它会被拼接回到结果中.或者你可以像Aaron一样聪明并使用一个字符类.)

(在Safari + FF中测试的示例)


如果您需要多个字符作为一个字符,例如"one; #two; #new jersey",您只需将字符串";#"传递给split函数即可."一个; #two; #new jersey".split(";#")[2] ==="新泽西"

3> Brian..:

另一种简单但有效的方法是重复使用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"] 

请享用!


你为什么写`for(var i = 0; i
4> Asher..:

让我们保持简单:(在您的RegEx中添加"[] +"表示"1或更多")

这意味着"+"和"{1,}"是相同的.

var words = text.split(/[ .:;?!~,`"&|()<>{}\[\]\r\n/\\]+/); // note ' and - are kept


我会说这很小,不简单
在末尾添加"+"表示1或更多

5> 小智..:

棘手的方法:

var s = "dasdnk asd, (naks) :d skldma";
var a = s.replace('(',' ').replace(')',' ').replace(',',' ').split(' ');
console.log(a);//["dasdnk", "asd", "naks", ":d", "skldma"]


这是错误的,因为.replace()不会替换所有元素`:/`

6> Stephen Swer..:

对于那些想要在分割函数中进行更多自定义的人,我编写了一个递归算法,该算法将给定字符串与要拆分的字符列表分开.在看到上面的帖子之前我写了这个.我希望它可以帮助一些沮丧的程序员.

splitString = function(string, splitters) {
    var list = [string];
    for(var i=0, len=splitters.length; i

以上示例返回: ["people", "and", "other", "things"]

注意:flatten功能取自Rosetta Code



7> PeterKA..:

您可以将要用作分隔符的所有字符单独或共同整合到正则表达式中,并将它们传递给split函数.比如你可以写:

console.log( "dasdnk asd, (naks) :d skldma".split(/[ \(,\)]+/) );

输出将是:

["dasdnk", "asd", "naks", ":d", "skldma"]

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有