我有一个字符串(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'
答案 0 :(得分:3)
使用String.prototype.split()传递正则表达式。
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;
在正则表达式中使用Capturing parentheses时,捕获的文本也会在数组中返回。
请注意,这将有一个结尾""
条目,因为您的字符串以@@
结尾。如果您不想要,请将其删除。
如果您始终假设格式正确的字符串,则以下正则表达式会产生相同的结果:
/##|@@/
如果您希望在##
和@@
之间添加换行符,请将表达式更改为:
/##([\s\S]*?)@@/
如果您需要它可以更好地执行,特别是使用更长的字符串更快地失败:
/##([^@]*(?:@[^@]+)*)@@/
答案 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)