Javascript和正则表达式:拆分并保留分隔符

Javascript和正则表达式:拆分并保留分隔符,javascript,regex,delimiter,Javascript,Regex,Delimiter,我有一个正则表达式,它可以将字符串拆分为数组 除了我想保留分隔符的一部分之外,任何东西都可以正常工作 这是我的正则表达式: (&#?[a-zA-Z0-9]+;)[\s] 在Javascript中,我正在做: var test = paragraph.split(/(&#?[a-zA-Z0-9]+;)[\s]/g); 我的段落如下: Current addresses: † Biopharmaceutical Research and Develo

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

除了我想保留分隔符的一部分之外,任何东西都可以正常工作

这是我的正则表达式:

(&#?[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 />
当前地址:&dagger;生物制药研发
&匕首;克洛维斯肿瘤学
&教派;双鱼座 ||生物科学学院 &段落;化学系
问题是我在数组中得到了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 />
1&匕首;生物制药研发
2. &匕首;克洛维斯肿瘤学
3. &教派&门派双鱼座 ||生物科学学院 4. &对位;化学系
正如我在评论中所说的,这个解决方案(顺便说一句,未经测试)只有在您只管理

元素时才有效。在这里:

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
}
var text=段落分割(“
”);//现在文本只包含每行上的文本
对于(var i=0;i尝试使用
match

var test = paragraph.match(/&#?[a-zA-Z0-9]+;\s[^&]*/g);
更新:添加了所需的空白
\s
匹配项

说明:

  • &#?
    匹配
    &
    和可选的
    (问号匹配前一个或零次)

  • [a-zA-Z0-9]
    是所有大小写字符和数字的范围。如果您也接受下划线,则可以将其替换为
    \w

  • +
    符号意味着它应该匹配最后一个模式一次或多次,因此它匹配一个或多个字符a-z、a-z和数字0-9

  • 与字符
    匹配

  • \s
    与类空格匹配。该类空格包括空格、制表符和其他空格字符

  • [^&]*
    再次表示一个范围,但由于
    ^
    是第一个字符,因此匹配将被否定,因此它不匹配
    &
    -字符,而是匹配除
    &
    之外的所有字符。星形匹配模式零次或多次

  • g
    最后,在最后一个
    /
    之后表示
    全局
    ,并使
    匹配在第一次匹配后继续,并获得所有匹配的数组


因此,匹配
&
和一个可选的
#
,后跟任意数量的字母或数字(但至少一个),后跟
,后跟一个空格,后跟零个或多个非
&

的字符。使用正则表达式非常简单:

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

测试一下。@ElliotBonneville:在哪里?我找不到解决方案。哦,对不起,我没有看到它是一个链接。你想创建一个链接吗?我已经发布了那篇文章,但我无法得到我问题的答案。谢谢,但我想你误解了我的问题。我知道如何用一个特殊字符作为分隔符分割我的。我们可以忘记
。我只知道需要将字符串拆分为以特殊字符开头的元素,并保留元素中的特殊字符。我很担心,因为我没有太多时间回答这个问题。非常感谢。如果可能,我还可以检查特殊字符后面是否有空格作为分隔符。@Milos是否需要空格(0x20)或者任何空白(空格、制表符、换行符、换行符和其他unicode空格)?太好了,非常感谢,这正是我所需要的。如果可能的话,请你给我解释一下你给我的正则表达式是如何工作的。我知道,对不起,我在浪费你的时间,但我想了解它,而不仅仅是复制粘贴。:)@米洛斯很好,你想了解它!如果有什么不清楚,告诉我。@Milos没问题!顺便说一句,您可以使用来玩regexp,并实时查看它与什么匹配。