我最近在javascript中为我的网站使用了修改后的字数统计方法,因此它计算了textarea中的初始数量字,但它不太有效
function wordCounter(field,countfield)
{
var maxlimit = 200;
var wordcounter = maxlimit - information.value.split(' ').length;
for (x = 0; x < field.value.length; x++)
{
if(field.value.charAt(x) == " " && field.value.charAt(x-1) != " ") // Counts the spaces while ignoring double spaces, usually one in between each word.
{
wordcounter++
}
if (wordcounter > 250)
{
field.value = field.value.substring(0, x);
}
else
{
countfield.value = maxlimit - wordcounter;
}
}
}
答案 0 :(得分:5)
给定字符串“s”,你这样做:
var numWords = s.replace(/^\s+|\s+$/g,"").split(/\s+/).length;
这会将字符串拆分为所有空格(空格,换行符等),也可以使用多个空格等。编辑:添加内联修剪以从开头/结尾去除空白。
答案 1 :(得分:4)
最简单的解决方案是计算非连续空格字符(空格,制表符等)的数量加一。
正则表达式:
\S\s
JavaScript的:
var str = "The fox jumped over the lazy dog.";
var wordcount = str.match(/\S\s/g).length + 1;
请注意,我没有使用“\ s +”,因为我不需要匹配所有空格,只需要在非空格后出现的空白字符。这有两个好处:
这里的许多答案都使用split()代替。 split()的唯一优点是不必在答案中加1,但是恕我直言,match()是更好的答案,因为代码更具可读性。代码的目的是找到单词边界,而不是分割单词。
此外,虽然match()和split()返回数组,但match()的内存开销较小,原因有两个:
答案 2 :(得分:1)
简单的方法是计算空格数并加1。
编辑:添加示例
这基本上就是这样。按空格分割
var str = 'adfs asdf a asdf';
alert(str.split(/\s+/).length);
答案 3 :(得分:0)
更简单的方法是使用JavaScript RegEx to count the words。
答案 4 :(得分:0)
x =“a b f d”;警报('x有'+ x.split(/ \ s + /)。length +'words')
答案 5 :(得分:0)
我不确定我是否理解你到底需要什么(你粘贴的代码让我感到困惑),但这里有一个简单的字数函数:
var text = "1 2 3 4000";
function wordCounter( text ) {
word_count = text.split(" ");
return word_count.length;
}
wordCounter( text ); // returns 4 as expected
答案 6 :(得分:0)
正则表达式中有一个分词匹配项,可让您搜索作为单词边界的任何内容,不仅搜索空格(\s
),还搜索标点符号。
所以:
const wordCount =
'the quick,brown fox jumped over the lazy dog.'.match(/\b\w+\b/gi).length + 1
但是,它也在'
处也被打断,[\w|']+
也被视为边界,因此,如果要处理正撇号,也需要考虑它们,方法是剥去它们或将它们插入单词中匹配(类似using LinqKit; // nuget
var customField_Ids = customFields?.Select(t => new CustomFieldKey { Id = t.Id, TicketId = t.TicketId }).ToList();
var uniqueIds1 = customField_Ids.Select(cf => cf.Id).Distinct().ToList();
var uniqueIds2 = customField_Ids.Select(cf => cf.TicketId).Distinct().ToList();
var predicate = PredicateBuilder.New<CustomFieldKey>(false); //LinqKit
var lambdas = new List<Expression<Func<CustomFieldKey, bool>>>();
foreach (var cfKey in customField_Ids)
{
var id = uniqueIds1.Where(uid => uid == cfKey.Id).Take(1).ToList();
var ticketId = uniqueIds2.Where(uid => uid == cfKey.TicketId).Take(1).ToList();
lambdas.Add(t => id.Contains(t.Id) && ticketId.Contains(t.TicketId));
}
predicate = AggregateExtensions.AggregateBalanced(lambdas.ToArray(), (expr1, expr2) =>
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<CustomFieldKey, bool>>
(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
});
var modifiedCustomField_Ids = repository.GetTable<CustomFieldLocal>()
.Select(cf => new CustomFieldKey() { Id = cf.Id, TicketId = cf.TicketId }).Where(predicate).ToArray();
)。