在javascript中执行split()并忽略空白条目的最佳方法是什么?

本文关键字:空白 最佳 是什么 方法 执行 javascript split | 更新日期: 2023-09-27 17:50:32

我有以下c#代码,我需要转换为javascript:

    static private string[] ParseSemicolon(string fullString)
    {
        if (String.IsNullOrEmpty(fullString))
            return new string[] { };
        if (fullString.IndexOf(';') > -1)
        {
            return fullString.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Select(str => str.Trim()).ToArray();
        }
        else
        {
            return new[] { fullString.Trim() };
        }
    }

我看到javascript也有一个split()函数,但我想看看是否有内置支持其他检查,或者我必须在数组周围做一个额外的循环,然后"清理"数据?

在javascript中执行split()并忽略空白条目的最佳方法是什么?

您可以使用filter,但此功能仅在较新的浏览器中实现。

"dog;in;bin;;cats".split(";").filter(function (x) { return x != ""; });

您可以使用带有量词的RegExp对任意连续的分隔符计数进行分割:

var parts = input.split(/;+/);

:

var input = "foo;;;bar;;;;;;;;;baz";
var parts = input.split(/;+/);
console.log(parts);
// [ "foo", "bar", "baz" ]

试试这个

"hello;aamir;;afridi".split(';').filter(Boolean)

"hello;;aamir;;;;afridi".split(';').filter(Boolean)

搜索结果

["hello", "aamir", "afridi"]

要将其转换回字符串,使用

"hello;aamir;;afridi".split(';').filter(Boolean).join(' ')

"hello;aamir;;afridi".split(';').filter(Boolean).join(';')

不幸的是javascript split()不检查双空间等,你需要稍后清理你的数组

var str = "How;are;;you;my;;friend?";
var arr = str.split(";");
alert(arr);
http://jsfiddle.net/p58qm/2/

你可以用这个循环

来更新数组
len = arr.length, i;
for(i = 0; i < len; i++ )
arr[i] && arr.push(arr[i]);  // copy non-empty values to the end of the array
arr.splice(0 , len);
alert(arr);
http://jsfiddle.net/p58qm/3/

试试这个:

function parseSemicolon(fullString) {
    var result = new Array();
    if (!!fullString && fullString.length > 0) {
        fullString = fullString.trim();
        if (fullString.indexOf(';') > -1) {
            result = fullString.split(';');
            for (var i = 0; i < result.length; i++) {
                result[i] = result[i].trim();
            }
        } else {
            result = new Array(fullString);
        }
    }
    return result;
}

Split也需要处理空结果。但是,

还有别的方法吗?http://jsfiddle.net/9mHug/1/

var str = "aaa,bbb;ccc  ddd , eee";
var sp = str.match(/'w+/g);
alert(sp);

这将为您提供一个仅包含单词的干净数组。'w是一个正则表达式搜索,它将查找特定类型的所有字母[a-zA-Z0-9_]