如果我有一个如下所示的字符串,并且每次都不是静态的。
var str = "#a
b
c
_
ele1
ele2
#d
e
f
_
ele3
";
从上面的字符串我想要检索一个如下所示的数组
arr = [ "#a
b
c
_",
"ele1",
"ele2",
"#d
e
f
_",
"ele3"
]
标准是:#和_之间的所有内容作为单个项目;这些分隔符之外的每一行都是一个单独的项目。
我怎么能这样做。任何想法......请使用this小提琴。
答案 0 :(得分:4)
同样,鉴于评论中的标准,这是有效的
var arr = str.match(/(?:#([^_]*)_|([^#_\s])+)/g)
并解释正则表达式
#([^_]*)_
- 查找_
之间#
和_
之间的任何内容(*
表示即使是空字符串也会被捕获)< / 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("_");