javascript - 通过指定起始和结束字符来拆分字符串

时间:2016-08-07 10:23:39

标签: javascript regex string

我有一个字符串(100*##G. Mobile Dashboard||Android App ( Practo.com )||# of new installs@@-##G. Mobile Dashboard||Android App ( Practo.com )||# of uninstalls@@

我希望以这样的方式拆分字符串,使其返回以下结果(即它匹配以##开头并以@@结尾的所有字符,并将字符串拆分为匹配的字符)< / p>

["(100*", "G. Mobile Dashboard||Android App ( Practo.com )||# of new installs", '-', 'G. Mobile Dashboard||Android App ( Practo.com )||# of uninstalls'

3 个答案:

答案 0 :(得分:3)

使用String.prototype.split()传递正则表达式。

&#13;
&#13;
var str = "(100*##G. Mobile Dashboard||Android App ( Practo.com )||# of new installs@@-##G. Mobile Dashboard||Android App ( Practo.com )||# of uninstalls@@";

var re = /##(.*?)@@/;

var result = str.split(re);
console.log(result);
&#13;
&#13;
&#13;

在正则表达式中使用Capturing parentheses时,捕获的文本也会在数组中返回。

请注意,这将有一个结尾""条目,因为您的字符串以@@结尾。如果您不想要,请将其删除。

  • 如果您始终假设格式正确的字符串,则以下正则表达式会产生相同的结果:

    /##|@@/
    

    *由T.J. Crowder

  • 评论
  • 如果您希望在##@@之间添加换行符,请将表达式更改为:

    /##([\s\S]*?)@@/
    
  • 如果您需要它可以更好地执行,特别是使用更长的字符串更快地失败:

    /##([^@]*(?:@[^@]+)*)@@/
    

    * Benchmark

答案 1 :(得分:2)

您可以先按##拆分,然后将每个结果拆分为@@,然后展平生成的数组,如下所示。

s.split('##').map(el => el.split('@@')).reduce((acc, curr) => acc.concat(curr))

请注意,如果原始字符串以@@结尾,则结果数组的最后一个元素将为空字符串,因此您可能需要将其删除,具体取决于您的用例。

答案 2 :(得分:2)

您可以使用:

var s = '(100*##G. Mobile Dashboard||Android App ( Practo.com )||# of new installs@@-##G. Mobile Dashboard||Android App ( Practo.com )||# of uninstalls@@'

var arr = s.split(/(##.*?@@)/).filter(Boolean)

//=> ["(100*", "##G. Mobile Dashboard||Android App ( Practo.com )||# of new installs@@", "-", "##G. Mobile Dashboard||Android App ( Practo.com )||# of uninstalls@@"]
  • 使用捕获组在结果数组中获取拆分文本
  • 要从数组中删除空结果,需要
  • filter(Boolean)