str.rsplit([sep[, maxsplit]])
返回一个 字符串中单词的列表,使用 sep 作为分隔符字符串。如果 maxsplit 给定,最多 maxsplit 分割完成,最右边的。 如果未指定 sep 或 None,则任何 空白字符串是分隔符。 除了从右翼分裂之外, rsplit() 的行为类似于 split() ,即 下面详细描述。
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' ]
您还可以使用 JS 字符串函数 split + slice
Python:
'a,b,c'.rsplit(',' -1)[0]
会给你'a,b'
Javascript:
'a,b,c'.split(',').slice(0, -1).join(',')
还会给你'a,b'
假设 JavaScript split 的语义可以接受,请使用以下内容
String.prototype.rsplit = function (delimiter, limit) {
delimiter = this.split (delimiter || /s+/);
return limit ? delimiter.splice (-limit) : delimiter;
}
我认为在发现错误之前这更“等效”,“关闭”对于答案是不可接受的。特别是如果您在不了解 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]
}