【问题标题】:JavaScript equivalent of Python's rsplitJavaScript 等效于 Python 的 rsplit
【发布时间】:2011-07-09 07:04:01
【问题描述】:

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

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

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

【问题讨论】:

  • 不是内置的。您必须编写自己的函数。你有没有尝试过?
  • 是的,我写了自己的蹩脚版本。但我很确定 Stacko 上的某个人可以给我写一个更好的(他们确实做到了)。

标签: javascript python string split


【解决方案1】:

假设 JavaScript 拆分的语义是可以接受的,请使用以下

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

【讨论】:

  • 这不会返回与限制 > 1 的 rsplit 相同的行为。
【解决方案2】:
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' ]

【讨论】:

  • 是的,这很好,但我认为应该是 this.split(sep || /\s+/),就像 Hans 的版本一样。
  • 我同意 ;-),链接到的 Python 文档明确指出:“如果未指定 sep 或无,则任何空白字符串都是分隔符”。
  • 我根据 Array.split 的正常行为省略了它。 'blah,derp'.split() 或 'blah,derp'.split(undefined) 都会产生 ['blah,derp'] 并不是说​​它不应该被包括在内,我可能会遇到一些边缘情况没想到。
  • a.slice(a.indexOf(delimiter)+1)
  • 这里是一个不污染全局 String 对象的版本的重构:github.com/mozilla/OpenWPM/pull/409/files
【解决方案3】:

你也可以使用JS字符串函数split + slice

Python:

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

Javascript:

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

【讨论】:

  • 但是你不能做类似const [initial, last] = 'a,b,c'.rsplit(',')的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2011-06-18
  • 2011-06-25
  • 2020-09-10
  • 2019-12-20
相关资源
最近更新 更多