我有一个正则表达式,将我的字符串分割成数组。
Everyything作品不同的是,我想保留分隔符的一部分罚款。
这里是我的正则表达式:
(&#?[a-zA-Z0-9]+;)[\s]
在Javascript中,我做的:
var test = paragraph.split(/(&#?[a-zA-Z0-9]+;)[\s]/g);
我的段落如下:
Current addresses: † Biopharmaceutical Research and Development<br />
‡ Clovis Oncology<br />
§ Pisces Molecular <br />
|| School of Biological Sciences
¶ Department of Chemistry<br />
问题是,我得到我的阵列10个元素,而不是5中我应该。 其实,我也让我的分隔符作为一个元素,我的目标是保持与splited元素的分隔符,而不是创建一个新的。
非常感谢您的帮助。
编辑:
我想获得这个结果:
1. † Biopharmaceutical Research and Development<br />
2. ‡ Clovis Oncology<br />
3. § § Pisces Molecular <br />
|| School of Biological Sciences
4. ¶ Department of Chemistry<br />
尝试使用match
,而不是:
var test = paragraph.match(/&#?[a-zA-Z0-9]+;\s[^&]*/g);
更新:增加了一个需要空白\s
匹配。
说明:
&#?
比赛&
和可选#
(问号比赛前一个或零次)
[a-zA-Z0-9]
是一个范围的所有大写和小写字符和数字。 如果你也接受下划线,你可以用这个代替\w
。
的+
号表示,它应该一次或多次匹配最后一个模式,所以它包括AZ,az一个或多个字符和数字0-9匹配。
的;
匹配的字符;
。
该\s
类白色空间相匹配。 这包括空格,制表符和其他空白字符。
[^&]*
再次的范围内,但由于^
是第一个字符匹配被否定这样的,而不是匹配所述&
-characters它匹配一切,但&
。 星模式零次或多次匹配。
g
末,经过最后的/
是指global
,并使得match
后的首场比赛继续,并得到所有匹配的数组。
这样,匹配&
以及可选的#
,随后任意数量的字母或数字的(但至少一个),然后;
,接着是空白,接着是零个或多个字符不&
。
正如我在评论说,如果你只是管理该解决方案(未经测试,顺便说一句)只会工作<br />
元素。 这里:
var text = paragraph.split("<br />"); // now text contains just the text on each line
for(var i = 0; i<text.length-1; i++) { // don't want to add an line break to our last line
text[i] += " <br />"; // replace the <br /> elements on each line
}
可变text
现在是一个阵列,其中该阵列的每个元素是原始段的线。 的换行符( <br />
)已经被加回在每一行的末尾。 您刚才提到要分割的特殊字符,但是从我所看到的,每行一个换行符结束,所以这应该希望有同样的效果。 不幸的是,我没有写上去的那一刻一个更完整的答案的时间。
使用正则表达式是相当简单:
var result = input.match(/&#?[^\W_]+;\s[^&]*/g);
测试它在这里 。