用空格拆分包含标签的字符串(不包含标签)而不打破标签或标签中的内部html
问题描述:
我试图将空格拆分为单词数组。如果字符串包含HTML标签,我希望完整标签(包括内容)被视为一个单词。用空格拆分包含标签的字符串(不包含标签)而不打破标签或标签中的内部html
例如,
I like to eat <a href="http://www.waffles.com/">tasty delicious waffles</a> for breakfast
应该分成
I
like
to
eat
<a href="http://www.waffles.com/">tasty delicious waffles</a>
for
breakfast
我见过的堆栈溢出了几个相关的线程,但我无法适应什么的Javascript,因为他们书面我不太熟悉的语言。有没有一个正则表达式可以很容易地做到这一点,或者解决方案是否需要多个正则表达式分割和迭代?
谢谢。
答
result = subject.match(/<\s*(\w+\b)(?:(?!<\s*\/\s*\1\b)[\s\S])*<\s*\/\s*\1\s*>|\S+/g);
会工作,如果你的标签不能嵌套,如果所有的标签都完全关闭,如果目前的标签名称不评论出现,字符串等
说明:
<\s* # Either match a < (+ optional whitespace)
(\w+\b) # tag name
(?: # Then match...
(?! # (as long as it's impossible to match...
<\s*\/\s*\1\b # the closing tag here
) # End of negative lookahead)
[\s\S] # ...any character
)* # zero or more times.
<\s*\/\s*\1\s*> # Then match the closing tag.
| # OR:
\S+ # Match a run of non-whitespace characters.
答
单独使用正则表达式很难或不可能完成(取决于您希望/需要允许的HTML复杂性)。
取而代之,遍历父节点的子节点,如果它们是文本节点,则将其拆分,如果它们是非文本节点,则将它们未经修改地打印出来。
是否可以嵌套标签,例如'