我正在尝试编写一个简单的函数,以将给定的消息裁剪为特定的长度,但同时不要剪切中间的单词,并且最后不要尾随空格。
示例:
输入字符串:快速的棕色狐狸跳过了围栏, K :11
输出:快速
这是我尝试过的:
function crop(message, K) {
var originalLen = message.length;
if(originalLen<K)
{
return message;
}
else
{
var words = message.split(' '),substr;
for(var i=words.length;i > 0;i--)
{
words.pop();
if(words.join(' ').length<=K)
{
return words.join(' ');
}
}
}
}
此功能工作正常,但我对实现并不满意。需要有关性能方面的建议,并且在某些情况下这种方法行不通吗?
答案 0 :(得分:2)
您可以检查新字符串的长度,并增加用于切片数组的索引。
function crop(message, l) {
var parts = message.split(/\s+/),
i = 1;
if (message.length < l) return message;
while (parts.slice(0, i).join(' ').length < l) i++;
return parts.slice(0, i - 1).join(' ');
}
console.log(crop('The quick brown fox jumped over the fence', 11)); // 'The quick'
答案 1 :(得分:2)
这可以使用任何for循环无需完成工作
function crop(message, K) {
var originalLen = message.length;
if(originalLen<K)
{
return message;
}
else
{
var words = message.split(' ');
var splitWords = message.substring(0, K).split(' ');
if( words[splitWords.length - 1] != splitWords[splitWords.length - 1])
return splitWords.slice(0, splitWords.length - 1).join(' ');
else
return splitWords.join(' ');
}
}
var str = "The quick brown fox jumped over the fence";
console.log(crop(str, 11));
答案 2 :(得分:1)
只需查看您的代码!
Nina的答案非常好!
但是,this expression可能会帮助您做到这一点:
([A-z0-9\s]{1,11})(\s)(.*)
此表达式从右侧放宽,并具有三个捕获组,其中只有我刚刚在第一个捕获组中添加的字符列表,我确定您可能想要更改该列表,也许类似于:>
([A-Za-z0-9\s]{1,11})(\s)(.*)
此图显示了表达式的工作方式,您可以在此link中可视化其他表达式:
此JavaScript代码段使用简单的100万次for
循环来显示该表达式的性能。
const repeat = 1000000;
const start = Date.now();
for (var i = repeat; i >= 0; i--) {
const string = 'The quick brown fox jumped over the fence';
const regex = /([A-z0-9\s]{1,11})(\s)(.*)/gm;
var match = string.replace(regex, "$1");
}
const end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. ");
const regex = /([A-z0-9\s]{1,11})(\s)(.*)/s;
const str = `The quick brown fox jumped over the fence`;
const subst = `$1`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);