“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/