【问题标题】:when i press Enter on <textarea> the word counter not show the word当我在 <textarea> 上按 Enter 时,单词计数器不显示单词
【发布时间】:2020-04-06 14:01:40
【问题描述】:

Codepen project link

我如何更改正则表达式以计算任何人输入的单词并在其上写一些东西

(countWords=()=>{
	s = document.getElementById("inputString").value;
	s = s.replace(/(^\s*)|(\s*$)/gi,"");
	s = s.replace(/[ ]{2,4}/gi," ");
	s = s.replace(/\n /,"\n");
	document.getElementById("wordcount").value = s.split(' ').length;

})()
<textarea name="inputString" id="inputString" cols="50" rows="4">Text to count</textarea>
<br>
<input type="button" name="Convert" value="Count Words" onClick="countWords();"> 
<input name="wordcount" id="wordcount" type="text" value="" size="6">

【问题讨论】:

  • 是的,一个好的正则表达式会在这里创造奇迹。你的 sn-p 的问题是你被' ' 分割,但像One\nTwo 这样的东西算作一个。
  • 我下面的建议对你有用吗?

标签: javascript html regex web counter


【解决方案1】:

您可以使用 trim() 从开头/结尾删除空格,然后使用 1+ 个空格字符分割:

s.trim().split(/\s+/).length

或者,您可以使用匹配方法来计算所有非空白字符块:

document.getElementById("wordcount").value = s.match(/\S+/g)?.length || 0;

JS 演示(带有可选链接):

(countWords=()=>{
  s = document.getElementById("inputString").value;
  document.getElementById("wordcount").value = s.match(/\S+/g)?.length || 0;
})()
<textarea name="inputString" id="inputString" cols="50" rows="4">Text to count</textarea>
<br>
<input type="button" name="Convert" value="Count Words" onClick="countWords();"> 
<input name="wordcount" id="wordcount" type="text" value="" size="6">

JS 演示(没有可选链接):

(countWords=()=>{
  s = document.getElementById("inputString").value;
  var m =  s.match(/\S+/g);
  document.getElementById("wordcount").value = (m ? m.length : 0);
})()
<textarea name="inputString" id="inputString" cols="50" rows="4">Text to count</textarea>
<br>
<input type="button" name="Convert" value="Count Words" onClick="countWords();"> 
<input name="wordcount" id="wordcount" type="text" value="" size="6">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    相关资源
    最近更新 更多