javascript - javascript中的 chop 单词函数(研究dojo的代码)

标签 javascript string truncate

“chop 单词”将接受一串单词,并仅返回前 10 个单词。

在dojo(javascript库)中他们有这样一个函数,其代码是这样的:

truncatewords: function(value, arg){
    // summary: Truncates a string after a certain number of words
   // arg: Integer
   //              Number of words to truncate after
   arg = parseInt(arg);
   if(!arg){
           return value;
   }

   for(var i = 0, j = value.length, count = 0, current, last; i < value.length; i++){
           current = value.charAt(i);
           if(dojox.dtl.filter.strings._truncatewords.test(last)){
                   if(!dojox.dtl.filter.strings._truncatewords.test(current)){
                           ++count;
                           if(count == arg){
                                   return value.substring(0, j + 1);
                           }
                   }
           }else if(!dojox.dtl.filter.strings._truncatewords.test(current)){
                   j = i;
           }
           last = current;
   }
   return value;
}

哪里dojox.dtl.filter.strings._truncatewords./(&.*?;|<.*?>|(\w[\w-]*))/g

为什么不这样写:

function truncate(value,arg) {
    var value_arr = value.split(' ');
    if(arg < value_arr.length) {
        value = value_arr.slice(0,arg).join(' '); }
    return value;
}

有什么区别?

最佳答案

您的分割应考虑到任何空白字符序列都是单词分隔符。您应该按照 \s+ 之类的正则表达式进行拆分。

但除此之外,dojo 的代码似乎也将实体和 xml 标签作为单词。如果您知道字符串中没有这样的东西,那么您的实现可能会成功。请注意,您的切片不会超出找到的单词数,这可能需要进行一些检查。

关于javascript - javascript中的 chop 单词函数(研究dojo的代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972134/

相关文章:

javascript - 在验证模式中使用 isStrongPassword

javascript - 将 require.main 传递给 path.dirname

string - 快速生成字符串组合的方法

php - 如何将 "Port O' brian 替换为 "Port O' Brian”?

sql - 截断后更新缓慢

javascript - 服务后和更新时 Angular 4 CLI 太慢

javascript - THREE.js 对象不会旋转

Ruby:使用字符串插值进行评估

Java Double Trouble - 如何在不使用 BigDecimal 的情况下确保 4.45 是 4.45?

mysql - 如何根据列数据截断一行?