【问题标题】:Split text into words将文本拆分为单词
【发布时间】:2016-05-26 09:05:39
【问题描述】:

我有这个 HTML 数据

<div id="sample">
    <p style="text-align: center;">
        <span style="font-family: 'comic sans ms', sans-serif; font-size: medium;">
            <strong>
                word1&nbsp;
                <span style="line-height: 1.5;">
                    word2&nbsp;
                </span>
                <span style="line-height: 1.5;">
                    word3&nbsp;
                </span>
                <span style="line-height: 1.5;">
                </span>
            </strong>
        </span>
    </p>
</div> 

我想获取 div 元素中的文本。

这是我的 JavaScript 代码:

var text = document.getElementById('sample');
var text_content = jQuery(text).text();
console.debug(text_content);

控制台记录word1 word2 word3

我要一个字一个字,所以我用split方法:

var text_content_array = text_content.split(" ");
console.debug(text_content_array); 

控制台记录["word1 word2 word3"]。字符串未标记化。

我尝试了这段代码,但没有成功:

var text_content_array = text_content.split(" \n\r\t\b\f");
console.debug(text_content_array); 

我应该怎么做才能从字符串中得到一个单词数组?

【问题讨论】:

  • 您的代码工作正常,拆分返回一个单词数组。检查上面的jsfiddle
  • @Bsienn:您的 JSFiddle 与 OP 的代码非常不同。您使用text.innerText 而不是jQuery(text).text(),这会产生完全不同的结果。而且您还使用了text_content.trim().split(' ') 而不是text_content.split(' ')。但是您的版本仍然显示["alyssa ", "enganio ", "gono"],前两个单词后有一个空格
  • @Borodin 我应该清除更多,我很着急。上面的小提琴不是我做的,但它是一个正确的版本。我会解释的。 .text() 返回文本加空格和新行,因为它们在代码、缩进等中。因此,拆分不会对包含新行的字符串起作用,trim() 也不会。 .innerText 解决了所有这些问题并仅返回纯文本。然后是魔术.split(' ') 和瞧。我们很高兴。

标签: javascript jquery html split


【解决方案1】:

您可以使用trim方法和正则表达式来获取数组。

类似的东西:console.log(text_content.trim().split(/[\s,]+/))

这是带有您的代码的 jsbin example

【讨论】:

    【解决方案2】:

    试试这个:-

    var text = document.getElementById('sample');
            var text_content = jQuery(text).text();
    
            var text_content_array = new Array(); 
            text_content_array = text_content.split(" ");
            for (var i = 0; i < text_content_array.length; i++) {
                if (text_content_array[i].trim().length > 0)
                    console.debug(text_content_array[i]);
            }
    

    希望这会对你有所帮助。

    【讨论】:

      【解决方案3】:

      试试这个

      var text_content_array = text_content.split(/&nbsp;|\b\s+/g);
      

      【讨论】:

      • 这会产生结果["\n \n \n \n alyssa", "enganio", "gono", ""]
      • 这可以通过在 RegEx 中添加相对转义来解决。无论如何,当你试图帮助一个人时,收到反对票很烦人
      • 我确信在您寻求帮助时收到误导性、未经测试和故障代码同样令人讨厌。您的建议距离工作还有很长的路要走,而且您甚至似乎都不知道您的正则表达式模式匹配什么。请展示您将如何通过添加相关转义符来修复您的解决方案。
      【解决方案4】:

      试试这个

      var a = $("#sample").text().trim();
      var b = a.replace(/\s+/g,',');
      var c = b.split(',')
      alert(c);
      

      https://jsfiddle.net/sum1/xyp3cn37/1/

      【讨论】:

      • 我想知道您为什么要将所有空格序列转换为逗号,然后以逗号分隔?它与只分割空白序列具有相同的效果,没有中间变量
      • @Borodin 所有的空格序列都不会转换为逗号,而是转换为单个逗号 :D,这样我们只有一个逗号分隔实际文本。
      • 你可以用var c = a.split(/\s+/)实现同样的事情
      • 如果你使用这个:var c = a.split(/\s+/),你会得到 c 的值作为 'alyssaundefinedenganioundefinedgono' 现在不可能分离字符串了。
      • split 返回一个字符串数组,我不明白你怎么会认为它返回了一个这样的字符串。 undefined 子字符串从何而来,为什么数组被折叠成单个字符串?
      【解决方案5】:

      换行符和不间断空格不会匹配字符串" ",但它们匹配正则表达式模式\s

      从文本中收集所有单独单词的最简单方法是使用 match() 查找所有非空格字符序列 (\S)。此方法无需在拆分字符串之前对其进行修剪。像这样

      var text = document.getElementById('sample');
      var text_content_array = jQuery(text).text().match(/\S+/g);
      console.debug(text_content_array);
      

      输出

      ["word1", "word2", "word3"]
      

      【讨论】:

        猜你喜欢
        • 2010-10-21
        • 1970-01-01
        • 2021-10-16
        • 2010-10-13
        • 2020-12-15
        • 2016-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多