我的字符串包含很多HTML实体,比如
&安培;#X22;你好&安培; NBSP;&安培; LT;每个人&安培; GT;&安培; NBSP;还有&安培;#X22;
我想通过HTML实体将其拆分为:
您好
大家
有
有人可以建议我这样做吗?可能正在使用Regex?
答案 0 :(得分:3)
看起来你可以分开&[^;]*;
正则表达式。也就是说,分隔符是以&
开头的字符串,以;
结尾,中间除了;
之外还有其他内容。
如果您可以连续使用多个分隔符,并且不希望它们之间有空字符串,则只需使用(&[^;]*;)+
(或通常(
delim
< / em> )+
模式)。
如果你可以在字符串的开头或前面有分隔符,并且你不希望它们是由它们引起的空字符串,那么只需在拆分之前将它们修剪掉。
以下是展示上述想法的代码段(see also on ideone.com):
var s = ""Hello <everybody> there""
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)
>> ""Hello <everybody> there"".split(/(?:&[^;]+;)+/)
['', 'Hello', 'everybody', 'there', '']
正则表达式是:/(?:&[^;]+;)+/
将实体与&
匹配,后跟1 +非;
个字符,后跟;
。然后将这些(或更多)中的至少一个匹配为拆分分隔符。使用(?:expression)
非捕获语法,以便捕获的分隔符不会被放入结果数组中(split()
将捕获组放入结果数组中(如果它们出现在模式中)。