我有一个正则表达式,它将我的字符串拆分为数组。
除了我想保留分隔符的一部分外,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个元素。事实上,我也将分隔符作为元素,我的目标是保持分隔符与分裂元素,而不是创建一个新分隔符。
非常感谢你的帮助。
编辑:
我希望得到这个结果:
1. † Biopharmaceutical Research and Development<br />
2. ‡ Clovis Oncology<br />
3. § § Pisces Molecular <br />
|| School of Biological Sciences
4. ¶ Department of Chemistry<br />
答案 0 :(得分:1)
正如我在评论中所说,这个解决方案(顺便说一句,未经测试)只有在您管理<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 />
)已添加回每行的末尾。你刚刚提到你要分割特殊字符,但从我看到的,每一行以换行符结束,所以这应该具有相同的效果。不幸的是,我现在没有时间写出更完整的答案。
答案 1 :(得分:1)
尝试改为使用match
:
var test = paragraph.match(/&#?[a-zA-Z0-9]+;\s[^&]*/g);
更新:添加了必需的空格\s
匹配。
说明:
&#?
匹配&
和可选的#
(问号匹配上一次或零次)
[a-zA-Z0-9]
是所有大写和小写字符和数字的范围。如果您也接受下划线,则可以将其替换为\w
。
+
符号表示它应与最后一个模式匹配一次或多次,因此它匹配一个或多个字符a-z,A-Z和数字0-9。
;
匹配字符;
。
\s
与班级空格相匹配。这包括空格,制表符和其他空白字符。
[^&]*
再一次是一个范围,但由于^
是第一个匹配被否定的字符,所以它不是匹配&
- 字符,而是匹配&
之外的所有字符。 {1}}。星形匹配模式零次或多次。
g
在最后/
表示global
之后,并在第一场比赛后继续match
并获得所有比赛的数组
所以,匹配&
和一个可选的#
,后跟任意数量的字母或数字(但至少有一个),然后是;
,后跟一个空格,后跟零个或多个不是&
的字符。
答案 2 :(得分:1)