JavaScript - 拆分字符串但不丢失分隔符

7

可能是重复问题:
JavaScript在不丢失字符的情况下分割字符串

我有一个字符串:

"<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>"

我希望将所有的 "abcdefg" 实例分离成一个数组,如下所示:
["<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>"];

我尝试:
var str="<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>";
var Array_Of_FooBars = str.split("</bar>"); 

alert(Array_Of_FooBars);

但它返回:
["<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg",]

它正在移除分隔符“”。我不想要那个。

我如何使用split而不丢失字符串中的分隔符?

Thanks. Ken


1
http://stackoverflow.com/questions/3047201/javascript-split-without-losing-character?rq=1 - user166390
2
你有一个像 <foo>abcdefg</bar> 这样的 XML/HMTL 元素字符串吗?我不这么认为。(翻译:当你编写询问问题的代码时,造成逆向思维会削弱效率。此外,你的问题应该是:“我有 Y ,想要 Z ,我该怎么做?”‘split()’ 不是唯一的解决方案。) - Tomalak
1
谢谢Tomalak - 非常有帮助 -_- 如果您不知道答案,为什么要发表负面回应呢? - user1502852
@kdawg:你的标签是错误的,它很有帮助...为什么不修复一下呢? - elclanrs
1
如何在不丢失分隔符的情况下使用split函数。 - user1502852
显示剩余7条评论
4个回答

16

试试这个。虽然不是完美的解决方案,但在大多数情况下应该可以工作。

str.split(/(?=<foo>)/)

也就是说,在每个开标签之前分割它。

编辑:您还可以使用match()进行操作,如下所示:

str.match(/<foo>.*?<\/bar>/g)

非常好的 Namida Aneskans - 正是我所问的。非常感谢,老兄 : ) - user1502852
很高兴知道'.match()方法也可以工作。再次感谢Namida Aneskans : ) 我认为我喜欢match - 因为似乎会有更少的错误空间 - 在一端和另一端匹配所有内容并抓取中间的所有内容?你觉得呢? - user1502852

2

看起来您最可能想使用match:

var s = "<foo>abcd1efg</bar><foo>abc2defg</bar><foo>abc3defg</bar><foo>abc4defg</bar>"
s.match(/(<foo>.+?<\/bar>)/g)
// =>["<foo>abcd1efg</bar>", "<foo>abc2defg</bar>", "<foo>abc3defg</bar>", "<foo>abc4defg</bar>"]

我喜欢这个,我删除了我的回答来点赞这一个。 - elclanrs

1
你可以通过简单的正则表达式迭代并构建数组:
var x = new RegExp('<foo>(.*?)</bar>', 'ig'),
s = "<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>",
matches = [];

while (i = x.exec(s)) {
    matches.push(i[0]);
}

刚刚意识到使用String.match()会更好;这段代码将更有用于匹配标签内的内容。

0

使用正向先行断言,这样正则表达式会断言特殊字符存在,但不会实际匹配它:

string.split(/<br \/>(?=&#?[a-zA-Z0-9]+;)/g);

好的,听起来不错。在你的例子中,我应该把 '</bar>' 分隔符放在哪里? - user1502852

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接