用于匹配\ sSTUFF \ r \ n中的东西的正则表达式

时间:2012-06-06 22:28:02

标签: javascript regex

我给了一个可怕的定界字符串。每个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']

谢谢!

3 个答案:

答案 0 :(得分: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, '')

答案 1 :(得分:2)

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

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

它似乎适用于所有示例。

答案 2 :(得分: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);
}