Javascript和RegEx:拆分并保持分隔符

时间:2012-09-07 11:45:28

标签: javascript regex delimiter

我有一个正则表达式,它将我的字符串拆分为数组。

除了我想保留分隔符的一部分外,Everyything工作得很好。

这是我的正则表达式:

(&#?[a-zA-Z0-9]+;)[\s]

在Javascript中,我在做:

var test = paragraph.split(/(&#?[a-zA-Z0-9]+;)[\s]/g);

我的段落如下:

Current addresses:  &dagger;    Biopharmaceutical Research and Development<br />
&Dagger;    Clovis Oncology<br />
&sect;  Pisces Molecular <br />
||  School of Biological Sciences    
&para;  Department of Chemistry<br />

问题是我在我的数组中得到10个元素,而不是我应该得到的5个元素。事实上,我也将分隔符作为元素,我的目标是保持分隔符与分裂元素,而不是创建一个新分隔符。

非常感谢你的帮助。

编辑:

我希望得到这个结果:

1. &dagger; Biopharmaceutical Research and Development<br />
2. &Dagger; Clovis Oncology<br />
3. &sect;   &sect;  Pisces Molecular <br />
||  School of Biological Sciences  
4.  &para;  Department of Chemistry<br />

3 个答案:

答案 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)

使用正则表达式非常简单:

var result = input.match(/&#?[^\W_]+;\s[^&]*/g);

测试here