Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将带有HTML的句子拆分为单词(但保留内联HTML不变)_Javascript_Html_Regex_Space_Preg Split - Fatal编程技术网

Javascript 将带有HTML的句子拆分为单词(但保留内联HTML不变)

Javascript 将带有HTML的句子拆分为单词(但保留内联HTML不变),javascript,html,regex,space,preg-split,Javascript,Html,Regex,Space,Preg Split,我正在寻找一种使用javascript将带有HTML的句子拆分成单词的方法,并保留内联HTML标记和完整的文本内容。标点符号可以看作是它最接近的单词的一部分。我想使用正则表达式,可能还有preg_split()来拆分句子。下面是一个例子: A word, <a href='#' title=''>words within tags should remain intact</a>, so here's <b>even more</b> <u&

我正在寻找一种使用javascript将带有HTML的句子拆分成单词的方法,并保留内联HTML标记和完整的文本内容。标点符号可以看作是它最接近的单词的一部分。我想使用正则表达式,可能还有
preg_split()
来拆分句子。下面是一个例子:

A word, <a href='#' title=''>words within tags should remain intact</a>, so here's
<b>even more</b> <u>words</u>
一个词,下面是
更多的话
最后,我想提出以下建议:

[0] => A
[1] => word,
[2] => <a href='#' title=''>words within tags should remain intact</a>,
[3] => so
[4] => here's
[5] => <b>even more</b>
[6] => <u>words</u>
[0]=>A
[1] =>字,
[2] => ,
[3] =>所以
[4] =>这里是
[5] =>甚至更多
[6] =>单词

我知道关于使用正则表达式解析HTML的讨论(我喜欢阅读:-p),但我需要在不损害带有属性的HTML标记的情况下拆分句子中的单词。我不知道如何用JS以与正则表达式不同的方式实现这一点。当然,如果有其他选择,我会非常乐意去适应它们,以达到类似的结果。:-)


编辑: 我在Stackoverflow上搜索了类似的问题,但这些问题并没有为我打勾。让我们稍微透视一下:

  • :分割内联HTML的目标,这是我希望保持不变的内容
  • :以HTML代码段中的所有文本节点为目标,即使在HTML标记中也是如此。但事实上,我只想针对HTML元素之外的空间(因此甚至不包括用HTML标记包装的文本节点内的空间)

    • 这是可能的,但使用纯正则表达式解决方案会有一些缺点。最容易调用的是嵌套HTML。我将要展示的解决方案使用一些反向引用来解决这个问题,但是如果您得到一些复杂的嵌套HTML,它可能会以奇怪的方式开始失败

      /(?:<(\w+)[^>]*>(?:[\w+]+(?:(?!<).*?)<\/\1>?)[^\s\w]?|[^\s]+)/g
      

      /(?:]*>(?:[\w++)(?:(?!这是可能的,但是使用纯正则表达式解决方案会有一些缺点。最容易调用的是嵌套HTML。我将要展示的解决方案使用一些反向引用来尝试绕过此问题,但是如果您得到一些复杂的嵌套HTML,它可能会以奇怪的方式开始失败

      /(?:<(\w+)[^>]*>(?:[\w+]+(?:(?!<).*?)<\/\1>?)[^\s\w]?|[^\s]+)/g
      

      /(?:]*>(?:[\w++)(?:(?!这是可能的,但是使用纯正则表达式解决方案会有一些缺点。最容易调用的是嵌套HTML。我将要展示的解决方案使用一些反向引用来尝试绕过此问题,但是如果您得到一些复杂的嵌套HTML,它可能会以奇怪的方式开始失败

      /(?:<(\w+)[^>]*>(?:[\w+]+(?:(?!<).*?)<\/\1>?)[^\s\w]?|[^\s]+)/g
      

      /(?:]*>(?:[\w++)(?:(?!这是可能的,但是使用纯正则表达式解决方案会有一些缺点。最容易调用的是嵌套HTML。我将要展示的解决方案使用一些反向引用来尝试绕过此问题,但是如果您得到一些复杂的嵌套HTML,它可能会以奇怪的方式开始失败

      /(?:<(\w+)[^>]*>(?:[\w+]+(?:(?!<).*?)<\/\1>?)[^\s\w]?|[^\s]+)/g
      

      /(?:]*>(?:[\w++)(?:(?!您可以使用以下代码段:

      函数拆分为字(div){
      函数removeEmptyStrings(k){
      返回k!='';
      }
      var rWordBoundary=//[\s\n\t]+//;//包括空格、换行符和制表符
      var输出=[];
      对于(var i=0;i
      
      一句话,这就是
      更多的话
      
      您可以使用以下代码段:

      函数拆分为字(div){
      函数removeEmptyStrings(k){
      返回k!='';
      }
      var rWordBoundary=//[\s\n\t]+//;//包括空格、换行符和制表符
      var输出=[];
      对于(var i=0;i
      
      一句话,这就是
      更多的话
      
      您可以使用以下代码段:

      函数拆分为字(div){
      函数removeEmptyStrings(k){
      返回k!='';
      }
      var rWordBoundary=//[\s\n\t]+//;//包括空格、换行符和制表符
      var输出=[];
      对于(var i=0;i
      
      一句话,这就是
      更多的话
      
      您可以使用以下代码段:

      函数拆分为字(div){
      函数removeEmptyStrings(k){
      返回k!='';
      }
      var rWordBoundary=//[\s\n\t]+//;//包括空格、换行符和制表符
      var输出=[];
      为了(