按空格拆分字符串(包含标签)而不破坏标签或在Javascript中标记内部html

mca*_*ter 1 javascript regex split

我试图用空格将一个字符串拆分成一个单词数组.如果字符串包含HTML标记,我希望将完整标记(包括内容)视为单个单词.

例如,

I like to eat <a href="http://www.waffles.com/">tasty delicious waffles</a> for breakfast
Run Code Online (Sandbox Code Playgroud)

应分成

I
like
to
eat
<a href="http://www.waffles.com/">tasty delicious waffles</a>
for
breakfast
Run Code Online (Sandbox Code Playgroud)

我已经在Stack Overflow上看到了几个相关的线程但是我无法适应Javascript,因为它们是针对我不太熟悉的语言编写的.是否有正则表达式可以轻松地执行此操作或解决方案是否需要多个正则表达式拆分和迭代?

谢谢.

Tim*_*ker 6

result = subject.match(/<\s*(\w+\b)(?:(?!<\s*\/\s*\1\b)[\s\S])*<\s*\/\s*\1\s*>|\S+/g);
Run Code Online (Sandbox Code Playgroud)

如果您的标签无法嵌套,所有标签都已正确关闭,并且当前标签名称未出现在评论,字符串等中,则可以正常工作.

说明:

<\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.
Run Code Online (Sandbox Code Playgroud)