HTML实体拆分字符串?

时间:2010-06-14 08:20:44

标签: javascript html regex

我的字符串包含很多HTML实体,比如

  

&安培;#X22;你好&安培; NBSP;&安培; LT;每个人&安培; GT;&安培; NBSP;还有&安培;#X22;

我想通过HTML实体将其拆分为:

  

您好
  大家
  有

有人可以建议我这样做吗?可能正在使用Regex?

4 个答案:

答案 0 :(得分:3)

看起来你可以分开&[^;]*;正则表达式。也就是说,分隔符是以&开头的字符串,以;结尾,中间除了;之外还有其他内容。

如果您可以连续使用多个分隔符,并且不希望它们之间有空字符串,则只需使用(&[^;]*;)+(或通常( delim < / em> )+模式)。

如果你可以在字符串的开头或前面有分隔符,并且你不希望它们是由它们引起的空字符串,那么只需在拆分之前将它们修剪掉。


实施例

以下是展示上述想法的代码段(see also on ideone.com):

var s = "&#x22;Hello&nbsp;&lt;everybody&gt;&nbsp;there&#x22;"

print (s.split(/&[^;]*;/));
// ,Hello,,everybody,,there,

print (s.split(/(?:&[^;]*;)+/));
// ,Hello,everybody,there,

print (
   s.replace(/^(?:&[^;]*;)+/, "")
    .replace(/(?:&[^;]*;)+$/, "")
    .split(/(?:&[^;]*;)+/)
);
// Hello,everybody,there

答案 1 :(得分:0)

var a = str.split(/\&[#a-z0-9]+\;/);应该这样做,虽然当你有两个实体相邻时,你最终会得到数组中的空插槽。

答案 2 :(得分:0)

split(/&.*?;(?=[^&]|$)/)

并删除最后和第一个结果:

["", "Hello", "everybody", "there", ""]

答案 3 :(得分:0)

>> "&#x22;Hello&nbsp;&lt;everybody&gt;&nbsp;there&#x22;".split(/(?:&[^;]+;)+/)
['', 'Hello', 'everybody', 'there', '']

正则表达式是:/(?:&[^;]+;)+/

将实体与&匹配,后跟1 +非;个字符,后跟;。然后将这些(或更多)中的至少一个匹配为拆分分隔符。使用(?:expression)非捕获语法,以便捕获的分隔符不会被放入结果数组中(split()将捕获组放入结果数组中(如果它们出现在模式中)。