1

我得到了一个可怕的分隔符字符串。每个 id 都被左侧的空格(' ')和右侧的回车('\r')包围。我想拆分这个字符串并取回 javascript 中的所有 id。

例如: ' hey\r my\r name\r is\r'应该返回数组['hey', 'my', 'name', 'is']

到目前为止,我尝试过:

str.split(/ (.+)\r/g)
str.split(/(?:\s)(.+)(?:\r)/)
str.split(/\s(.+?=\r)/)

一切都无济于事。我得到了最接近的str.split(/(?:\s)(.+)(?:\r)/),但它给了我: ['', 'hey', '', 'my', '', 'name', '', 'is', '']。什么匹配空字符串?

匹配这个的正则表达式是什么?

编辑:

Id 可以有任何其他空白字符,所以这是一个有效的 id:123\t234\n。' abc\r 123\n456\t\r' 应该返回 ['abc', '123\n456\t' ]

谢谢!

4

3 回答 3

4

怎么样:

var parts = str.replace(/^\s+|\s+$/g, '').split(/\s+/)

也就是说,删除前导和尾随空白字符,然后只拆分内部空白字符(并将它们全部消耗掉)。

> var str = ' hey\r my\r name\r is\r'
  undefined
> str.replace(/^\s+|\s+$/g, '').split(/\s+/)
  ["hey", "my", "name", "is"]

如果您只想拆分,\r则:

.split(/\r +/)

您可以将修剪更改为:

.replace(/^[\r ]+|[\r ]+$/g, '')
于 2012-06-06T22:31:17.340 回答
2

也许我无法理解问题的难度,但你为什么不能简单地使用:

str.replace(/^[ ]?|[ ]?$/, "").split("\r ");

它似乎适用于您的所有示例。

于 2012-06-06T22:49:10.943 回答
0
\s*(\S*)\s*\r

您的比赛将在第 1 组

在javascript中,您可以遍历所有匹配项并像这样捕获

var myregexp = /\s*(\S*)\s*\r/g;
var match = myregexp.exec(subject);
while (match != null) {
    for (var i = 0; i < match.length; i++) {
        // matched text: match[i]
    }
    match = myregexp.exec(subject);
}
于 2012-06-06T22:56:58.350 回答