【问题标题】:Split string into array between to characters?将字符串拆分为字符之间的数组?
【发布时间】:2014-06-30 08:26:48
【问题描述】:

所以我试图以一些不规则的方式拆分我拥有的字符串。我试图用正则表达式做一些事情,但我不太喜欢正则表达式来发明类似的东西。

基本上我有一个看起来像这样的字符串:

var links = "<a>4</a><b><c><d><e><f>";

我想使用 .split() js 方法来接收数组,如下所示:

["<a>4</a>", "<b>", "<c>", "<d>", "<e>", "<f>"]

所以很明显我需要将它们拆分为&gt;&lt; 字符,但如果我这样做:

links.split("><");

他们会按照我想要的方式分裂,但我会松开 &gt;&lt; 标志。示例:

["<a>4</a", "b", "c", "d", "e", "f>"]

这对我来说不是很好的解决方案。

所以基本上我的问题是:是否有可能使用正则表达式或其他方法来制作某种解决方案以获得我想象的数组结果?

【问题讨论】:

    标签: javascript arrays regex string


    【解决方案1】:

    一种快速而干净的方法是使用match 而不是split

    var matches = links.match(/<.+?>(?=<|$)/g)
    

    它给你的字符串

    ["<a>4</a>", "<b>", "<c>", "<d>", "<e>", "<f>"]
    

    请注意,在 HTML 等非正则语言中使用正则表达式是危险的。对于简单的事情通常没问题,但它也很有限,您可能会遇到意外,例如如果您想将其应用于嵌套元素。

    【讨论】:

    • 这是我认为更好的解决方案。我只是没有使用 .match() 这么多,我没有考虑到这一点。谢谢!
    【解决方案2】:

    一种快速的脏方法是在&gt;&lt; 之间添加一个分隔符,使用正则表达式replace,然后在该分隔符上进行拆分:

    var links = "<a>4</a><b><c><d><e><f>";
    links.replace(/></g, '>|<').split('|');
    

    结果:

    ["<a>4</a>", "<b>", "<c>", "<d>", "<e>", "<f>"]
    

    只需确保您选择的分隔符不会出现在字符串本身中。
    (您可以使用较长的字符串作为分隔符,例如:"|-|"。)

    【讨论】:

    • 是的,这实际上是快速'n'dirty 解决方案,它并不复杂,但我根本没有想到这个!明确指出!
    • 是的,它有效,并且易于理解,但@dystroy 的解决方案可能更有效 ;-) 感谢 +1
    猜你喜欢
    • 2020-07-21
    • 2021-03-06
    • 2012-02-22
    • 2016-04-01
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多