JavaScript 相当于 Python 的 rsplit

问题描述 投票:0回答:4

str.rsplit([sep[, maxsplit]])

返回一个 字符串中单词的列表,使用 sep 作为分隔符字符串。如果 maxsplit 给定,最多 maxsplit 分割完成,最右边的。 如果未指定 sep 或 None,则任何 空白字符串是分隔符。 除了从右翼分裂之外, rsplit() 的行为类似于 split() ,即 下面详细描述。

http://docs.python.org/library/stdtypes.html#str.rsplit

javascript python string split
4个回答
19
投票
String.prototype.rsplit = function(sep, maxsplit) {
    var split = this.split(sep);
    return maxsplit ? [ split.slice(0, -maxsplit).join(sep) ].concat(split.slice(-maxsplit)) : split;
}

这个功能更接近Python版本

"blah,derp,blah,beep".rsplit(",",1) // [ 'blah,derp,blah', 'beep' ]


8
投票

您还可以使用 JS 字符串函数 split + slice

Python:

'a,b,c'.rsplit(',' -1)[0]
会给你
'a,b'

Javascript:

'a,b,c'.split(',').slice(0, -1).join(',')
还会给你
'a,b'


2
投票

假设 JavaScript split 的语义可以接受,请使用以下内容

String.prototype.rsplit = function (delimiter, limit) {
  delimiter = this.split (delimiter || /s+/);
  return limit ? delimiter.splice (-limit) : delimiter;
} 

-1
投票

我认为在发现错误之前这更“等效”,“关闭”对于答案是不可接受的。特别是如果您在不了解 javascript 的情况下尝试移植 python 代码。

String.prototype.rsplit = function(sep, maxsplit) {
    var result = []
    if ( (sep === undefined) ) {
        sep = " "
        maxsplit = 0
    }

    if (maxsplit === 0  )
        return [this]

    var data = this.split(sep)


    if (!maxsplit || (maxsplit<0) || (data.length==maxsplit+1) )
        return data

    while (data.length && (result.length < maxsplit)) {
        result.push( data.pop() )
    }
    if (result.length) {
        result.reverse()
        if (data.length>1) {
            // thx @imkzh
            return [data.join(sep), ...result ]
        }
        return result
    }
    return [this]
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.