Javascript和正则表达式:拆分,并保持分隔符(Javascript and RegEx: S

2019-07-31 10:18发布

我有一个正则表达式,将我的字符串分割成数组。

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中我应该。 其实,我也让我的分隔符作为一个元素,我的目标是保持与splited元素的分隔符,而不是创建一个新的。

非常感谢您的帮助。

编辑:

我想获得这个结果:

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 />

Answer 1:

尝试使用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后的首场比赛继续,并得到所有匹配的数组。

这样,匹配&以及可选的# ,随后任意数量的字母或数字的(但至少一个),然后; ,接着是空白,接着是零个或多个字符不&



Answer 2:

正如我在评论说,如果你只是管理该解决方案(未经测试,顺便说一句)只会工作<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 /> )已经被加回在每一行的末尾。 您刚才提到要分割的特殊字符,但是从我所看到的,每行一个换行符结束,所以这应该希望有同样的效果。 不幸的是,我没有写上去的那一刻一个更完整的答案的时间。



Answer 3:

使用正则表达式是相当简单:

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

测试它在这里 。



文章来源: Javascript and RegEx: Split and keep delimiter