如何将此字符串拆分为数组

时间:2012-02-17 08:46:06

标签: javascript regex string

如果我有一个如下所示的字符串,并且每次都不是静态的。

 var str = "#a
            b
            c
            _
            ele1
            ele2
            #d
            e
            f
            _
            ele3
            ";

从上面的字符串我想要检索一个如下所示的数组

     arr = [ "#a
               b
               c
              _",
             "ele1",
             "ele2",
             "#d
               e
               f
              _",
             "ele3"
           ]

标准是:#和_之间的所有内容作为单个项目;这些分隔符之外的每一行都是一个单独的项目。

我怎么能这样做。任何想法......请使用this小提琴。

5 个答案:

答案 0 :(得分:4)

同样,鉴于评论中的标准,这是有效的

var arr = str.match(/(?:#([^_]*)_|([^#_\s])+)/g) 

http://jsfiddle.net/fhDPj/1/

并解释正则表达式

  • #([^_]*)_ - 查找_之间#_之间的任何内容(*表示即使是空字符串也会被捕获)< / LI>
  • ([^#_\s])+ - 查找不是#_或空格的任何内容(+表示只捕获非空字符串)
  • (?: | ) - 找到上述任一项(但由于上述表达式已捕获所需的字符串而无法捕获)
  • / /g - 全局匹配,返回字符串中的所有匹配项,而不仅仅是第一个匹配项

答案 1 :(得分:3)

是有意的空白吗?

试试这个:

<div id ="a">#abc_ele1ele2#def_ele34</div>​

脚本:

var str = $('#a').text();
var result = str.match(/(#[^_]*_)|([^#][^\d]*\d{1,})/g)
console.log(result)

EXPLANATION:
string.match()      - returns an array of matches
#[^_]*_             - finds anything that begins with # and ends with _ and with anything but _ in between
[^#][^\d]*\d{1,}    - finds anything with that does NOT start with #, followed by 0 or more non-numeric characters,  and ends with at least one digit

DEMO:检查您的控制台

这仍将与所有这些空格一起运行。你必须清楚你的分裂规则。

答案 2 :(得分:1)

var x = str.match(/(#?[a-z]+[0-9_]+?)/g);

答案 3 :(得分:1)

根据我在评论中的评论标准:

var str = "#a\nb\nc\n_\nfoo\nbar\n#d\ne\nf\n_";
var re = /((?:#[^_]*_)|(?:^.*$))/mg;
var result = str.match(re);
console.log(result);
// [ '#a\nb\nc\n_', 'foo', 'bar', '#d\ne\nf\n_' ]

正则表达式解释:匹配是从#_ - (?:#[^_]*_)的所有内容 - 或者是一行中的所有内容 - (?:^.*$)

编辑:由于空白......有点不同的策略:

var str = $('#a').text();
var re = /^\s*((?:#[^_]*_)|(?:.*?$))/mg;
var result = [], match;
while ((match = re.exec(str))) {
  result.push(match[1]);
}
console.log(result);​

答案 4 :(得分:0)

尝试拆分:

arr = str.split("_");