문자열에서 단어 세기
function WordCount(str) {
var totalSoFar = 0;
for (var i = 0; i < WordCount.length; i++)
if (str(i) === " ") { // if a space is found in str
totalSoFar = +1; // add 1 to total so far
}
totalsoFar += 1; // add 1 to totalsoFar to account for extra space since 1 space = 2 words
}
console.log(WordCount("Random String"));
나는 if
진술이 잘못되었다고 생각하는 것을 제외하고는 이것을 꽤 잘 이해했다고 생각합니다 . if(str(i)
공백 이 포함되어 있다고 말하는 방법은 1을 더합니다.
편집하다:
(블렌더 덕분에) 훨씬 적은 코드로이 작업을 수행 할 수 있다는 것을 알았습니다.
function WordCount(str) {
return str.split(" ").length;
}
console.log(WordCount("hello world"));
괄호가 아닌 대괄호를 사용하십시오.
str[i] === " "
또는 charAt
:
str.charAt(i) === " "
다음과 .split()
같이 할 수도 있습니다 .
return str.split(' ').length;
바퀴를 재발 명하기 전에 이것을 시도하십시오
에서 자바 스크립트를 사용하여 문자열에서 단어의 카운트 수
function countWords(str) {
return str.trim().split(/\s+/).length;
}
에서 http://www.mediacollege.com/internet/javascript/text/count-words.html
function countWords(s){
s = s.replace(/(^\s*)|(\s*$)/gi,"");//exclude start and end white-space
s = s.replace(/[ ]{2,}/gi," ");//2 or more space to 1
s = s.replace(/\n /,"\n"); // exclude newline with a start spacing
return s.split(' ').filter(function(str){return str!="";}).length;
//return s.split(' ').filter(String).length; - this can also be used
}
에서 사용 자바 스크립트 문자열에서 단어를 계산하는 정규식을 사용하지 않고 -이 최선의 방법이 될 것입니다
function WordCount(str) {
return str.split(' ')
.filter(function(n) { return n != '' })
.length;
}
작성자의 메모 :
이 스크립트를 수정하여 원하는 방식으로 단어를 계산할 수 있습니다. 중요한 부분은
s.split(' ').length
-이것은 공백을 계산합니다. 스크립트는 계산하기 전에 모든 추가 공백 (이중 공백 등)을 제거하려고합니다. 텍스트에 공백없이 두 단어가 포함 된 경우 "첫 번째 문장. 다음 문장의 시작"과 같이 한 단어로 계산됩니다.
문자열에서 단어를 세는 또 다른 방법입니다. 이 코드는 영숫자 문자와 "_", " '", "-", "'"문자 만 포함 된 단어를 계산합니다.
function countWords(str) {
var matches = str.match(/[\w\d\’\'-]+/gi);
return matches ? matches.length : 0;
}
문자열을 정리 한 후 공백이 아닌 문자 또는 단어 경계를 일치시킬 수 있습니다.
다음은 문자열에서 단어를 캡처하는 두 가지 간단한 정규식입니다.
- 공백이 아닌 문자 시퀀스 :
/\S+/g
- 단어 경계 사이의 유효한 문자 :
/\b[a-z\d]+\b/g
아래 예는 이러한 캡처 패턴을 사용하여 문자열에서 단어 수를 검색하는 방법을 보여줍니다.
/*Redirect console output to HTML.*/document.body.innerHTML='';console.log=function(s){document.body.innerHTML+=s+'\n';};
/*String format.*/String.format||(String.format=function(f){return function(a){return f.replace(/{(\d+)}/g,function(m,n){return"undefined"!=typeof a[n]?a[n]:m})}([].slice.call(arguments,1))});
// ^ IGNORE CODE ABOVE ^
// =================
// Clean and match sub-strings in a string.
function extractSubstr(str, regexp) {
return str.replace(/[^\w\s]|_/g, '')
.replace(/\s+/g, ' ')
.toLowerCase().match(regexp) || [];
}
// Find words by searching for sequences of non-whitespace characters.
function getWordsByNonWhiteSpace(str) {
return extractSubstr(str, /\S+/g);
}
// Find words by searching for valid characters between word-boundaries.
function getWordsByWordBoundaries(str) {
return extractSubstr(str, /\b[a-z\d]+\b/g);
}
// Example of usage.
var edisonQuote = "I have not failed. I've just found 10,000 ways that won't work.";
var words1 = getWordsByNonWhiteSpace(edisonQuote);
var words2 = getWordsByWordBoundaries(edisonQuote);
console.log(String.format('"{0}" - Thomas Edison\n\nWord count via:\n', edisonQuote));
console.log(String.format(' - non-white-space: ({0}) [{1}]', words1.length, words1.join(', ')));
console.log(String.format(' - word-boundaries: ({0}) [{1}]', words2.length, words2.join(', ')));
body { font-family: monospace; white-space: pre; font-size: 11px; }
독특한 단어 찾기
고유 한 개수를 얻기 위해 단어 매핑을 만들 수도 있습니다.
function cleanString(str) {
return str.replace(/[^\w\s]|_/g, '')
.replace(/\s+/g, ' ')
.toLowerCase();
}
function extractSubstr(str, regexp) {
return cleanString(str).match(regexp) || [];
}
function getWordsByNonWhiteSpace(str) {
return extractSubstr(str, /\S+/g);
}
function getWordsByWordBoundaries(str) {
return extractSubstr(str, /\b[a-z\d]+\b/g);
}
function wordMap(str) {
return getWordsByWordBoundaries(str).reduce(function(map, word) {
map[word] = (map[word] || 0) + 1;
return map;
}, {});
}
function mapToTuples(map) {
return Object.keys(map).map(function(key) {
return [ key, map[key] ];
});
}
function mapToSortedTuples(map, sortFn, sortOrder) {
return mapToTuples(map).sort(function(a, b) {
return sortFn.call(undefined, a, b, sortOrder);
});
}
function countWords(str) {
return getWordsByWordBoundaries(str).length;
}
function wordFrequency(str) {
return mapToSortedTuples(wordMap(str), function(a, b, order) {
if (b[1] > a[1]) {
return order[1] * -1;
} else if (a[1] > b[1]) {
return order[1] * 1;
} else {
return order[0] * (a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0));
}
}, [1, -1]);
}
function printTuples(tuples) {
return tuples.map(function(tuple) {
return padStr(tuple[0], ' ', 12, 1) + ' -> ' + tuple[1];
}).join('\n');
}
function padStr(str, ch, width, dir) {
return (width <= str.length ? str : padStr(dir < 0 ? ch + str : str + ch, ch, width, dir)).substr(0, width);
}
function toTable(data, headers) {
return $('<table>').append($('<thead>').append($('<tr>').append(headers.map(function(header) {
return $('<th>').html(header);
})))).append($('<tbody>').append(data.map(function(row) {
return $('<tr>').append(row.map(function(cell) {
return $('<td>').html(cell);
}));
})));
}
function addRowsBefore(table, data) {
table.find('tbody').prepend(data.map(function(row) {
return $('<tr>').append(row.map(function(cell) {
return $('<td>').html(cell);
}));
}));
return table;
}
$(function() {
$('#countWordsBtn').on('click', function(e) {
var str = $('#wordsTxtAra').val();
var wordFreq = wordFrequency(str);
var wordCount = countWords(str);
var uniqueWords = wordFreq.length;
var summaryData = [
[ 'TOTAL', wordCount ],
[ 'UNIQUE', uniqueWords ]
];
var table = toTable(wordFreq, ['Word', 'Frequency']);
addRowsBefore(table, summaryData);
$('#wordFreq').html(table);
});
});
table {
border-collapse: collapse;
table-layout: fixed;
width: 200px;
font-family: monospace;
}
thead {
border-bottom: #000 3px double;;
}
table, td, th {
border: #000 1px solid;
}
td, th {
padding: 2px;
width: 100px;
overflow: hidden;
}
textarea, input[type="button"], table {
margin: 4px;
padding: 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h1>Word Frequency</h1>
<textarea id="wordsTxtAra" cols="60" rows="8">Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.
Now we are engaged in a great civil war, testing whether that nation, or any nation so conceived and so dedicated, can long endure. We are met on a great battle-field of that war. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this.
But, in a larger sense, we can not dedicate -- we can not consecrate -- we can not hallow -- this ground. The brave men, living and dead, who struggled here, have consecrated it, far above our poor power to add or detract. The world will little note, nor long remember what we say here, but it can never forget what they did here. It is for us the living, rather, to be dedicated here to the unfinished work which they who fought here have thus far so nobly advanced. It is rather for us to be here dedicated to the great task remaining before us -- that from these honored dead we take increased devotion to that cause for which they gave the last full measure of devotion -- that we here highly resolve that these dead shall not have died in vain -- that this nation, under God, shall have a new birth of freedom -- and that government of the people, by the people, for the people, shall not perish from the earth.</textarea><br />
<input type="button" id="countWordsBtn" value="Count Words" />
<div id="wordFreq"></div>
이 방법은 당신이 원하는 것 이상이라고
var getWordCount = function(v){
var matches = v.match(/\S+/g) ;
return matches?matches.length:0;
}
String.prototype.match
배열을 반환하면 길이를 확인할 수 있습니다.
이 방법이 가장 설명 적이라고 생각합니다.
var str = 'one two three four five';
str.match(/\w+/g).length;
지금까지 찾은 가장 쉬운 방법은 분할 정규식을 사용하는 것입니다.
var calculate = function() {
var string = document.getElementById('input').value;
var length = string.split(/[^\s]+/).length - 1;
document.getElementById('count').innerHTML = length;
};
<textarea id="input">My super text that does 7 words.</textarea>
<button onclick="calculate()">Calculate</button>
<span id="count">7</span> words
@ 7-isnotbad가 제공하는 대답은 매우 가깝지만 한 단어 줄을 계산하지 않습니다. 여기에 단어, 공백 및 줄 바꿈의 가능한 모든 조합을 설명하는 수정 사항이 있습니다.
function countWords(s){
s = s.replace(/\n/g,' '); // newlines to space
s = s.replace(/(^\s*)|(\s*$)/gi,''); // remove spaces from start + end
s = s.replace(/[ ]{2,}/gi,' '); // 2 or more spaces to 1
return s.split(' ').length;
}
이 작업을 수행하는 더 효율적인 방법이있을 수 있지만 이것이 저에게 효과적이었습니다.
function countWords(passedString){
passedString = passedString.replace(/(^\s*)|(\s*$)/gi, '');
passedString = passedString.replace(/\s\s+/g, ' ');
passedString = passedString.replace(/,/g, ' ');
passedString = passedString.replace(/;/g, ' ');
passedString = passedString.replace(/\//g, ' ');
passedString = passedString.replace(/\\/g, ' ');
passedString = passedString.replace(/{/g, ' ');
passedString = passedString.replace(/}/g, ' ');
passedString = passedString.replace(/\n/g, ' ');
passedString = passedString.replace(/\./g, ' ');
passedString = passedString.replace(/[\{\}]/g, ' ');
passedString = passedString.replace(/[\(\)]/g, ' ');
passedString = passedString.replace(/[[\]]/g, ' ');
passedString = passedString.replace(/[ ]{2,}/gi, ' ');
var countWordsBySpaces = passedString.split(' ').length;
return countWordsBySpaces;
}
다음을 모두 별도의 단어로 인식 할 수 있습니다.
abc,abc
= 2 단어,
abc/abc/abc
= 3 단어 (슬래시 및 백 슬래시 사용),
abc.abc
= 2 단어,
abc[abc]abc
= 3 단어,
abc;abc
= 2 단어,
(내가 시도한 다른 제안은 위의 각 예제를 1 x 단어로 계산) 또한 다음과 같습니다.
모든 선행 및 후행 공백을 무시합니다.
이 페이지에 제공된 제안 중 일부가 계산되지 않는 것으로 나타났습니다. 예를 들어 a
a
a
a
a
는
때때로 0 x 단어로 계산됩니다. 다른 함수는 5 x 단어 대신 1 x 단어로만 계산합니다.)
누구든지 그것을 개선하는 방법에 대한 아이디어가 있거나 더 깨끗하고 효율적인 아이디어가 있다면 2 센트를 추가하십시오! 이것이 누군가를 도울 수 있기를 바랍니다.
function countWords(str) {
var regEx = /([^\u0000-\u007F]|\w)+/g;
return str.match(regEx).length;
}
설명:
/([^\u0000-\u007F]|\w)
단어 문자와 일치합니다-훌륭합니다-> 정규식은 우리에게 무거운 작업을 수행합니다. (이 패턴은 @Landeeyo의 https://stackoverflow.com/a/35743562/1806956 SO 답변을 기반으로합니다. )
+
이전에 지정된 단어 문자의 전체 문자열과 일치하므로 기본적으로 단어 문자를 그룹화합니다.
/g
끝까지 계속보고 있다는 뜻입니다.
str.match(regEx)
찾은 단어의 배열을 반환하므로 길이를 계산합니다.
Lodash를 사용하려는 사람들은 다음 _.words
기능 을 사용할 수 있습니다 .
var str = "Random String";
var wordCount = _.size(_.words(str));
console.log(wordCount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
다음은 단순히 문자열을 공백으로 분할 한 다음 for 루프가 배열을 반복하고 array [i]가 주어진 정규식 패턴과 일치하면 개수를 증가시키는 방법입니다.
function wordCount(str) {
var stringArray = str.split(' ');
var count = 0;
for (var i = 0; i < stringArray.length; i++) {
var word = stringArray[i];
if (/[A-Za-z]/.test(word)) {
count++
}
}
return count
}
다음과 같이 호출됩니다.
var str = "testing strings here's a string --.. ? // ... random characters ,,, end of string";
wordCount(str)
(기능의 정확성을 보여주기 위해 추가 문자 및 공백 추가)
위의 str은 10을 반환합니다.
Here's a function that counts number of words in an HTML code:
$(this).val()
.replace(/(( )|(<[^>]*>))+/g, '') // remove html spaces and tags
.replace(/\s+/g, ' ') // merge multiple spaces into one
.trim() // trim ending and beginning spaces (yes, this is needed)
.match(/\s/g) // find all spaces by regex
.length // get amount of matches
let leng = yourString.split(' ').filter(a => a.trim().length > 0).length
I'm not sure if this has been said previously, or if it's what is needed here, but couldn't you make the string an array and then find the length?
let randomString = "Random String";
let stringWords = randomString.split(' ');
console.log(stringWords.length);
I think this answer will give all the solutions for:
- Number of characters in a given string
- Number of words in a given string
- Number of lines in a given string
function NumberOf() {
var string = "Write a piece of code in any language of your choice that computes the total number of characters, words and lines in a given text. \n This is second line. \n This is third line.";
var length = string.length; //No of characters
var words = string.match(/\w+/g).length; //No of words
var lines = string.split(/\r\n|\r|\n/).length; // No of lines
console.log('Number of characters:',length);
console.log('Number of words:',words);
console.log('Number of lines:',lines);
}
NumberOf();
- First you need to find length of the given string by
string.length
- Then you can find number of words by matching them with string
string.match(/\w+/g).length
- Finally you can split each line like this
string.length(/\r\n|\r|\n/).length
I hope this can help those who are searching for these 3 answers.
<textarea name="myMessage" onkeyup="wordcount(this.value)"></textarea>
<script type="text/javascript">
var cnt;
function wordcount(count) {
var words = count.split(/\s/);
cnt = words.length;
var ele = document.getElementById('w_count');
ele.value = cnt;
}
document.write("<input type=text id=w_count size=4 readonly>");
</script>
I know its late but this regex should solve your problem. This will match and return the number of words in your string. Rather then the one you marked as a solution, which would count space-space-word as 2 words even though its really just 1 word.
function countWords(str) {
var matches = str.match(/\S+/g);
return matches ? matches.length : 0;
}
You got some mistakes in your code.
function WordCount(str) {
var totalSoFar = 0;
for (var i = 0; i < str.length; i++) {
if (str[i] === " ") {
totalSoFar += 1;
}
}
return totalSoFar + 1; // you need to return something.
}
console.log(WordCount("Random String"));
There is another easy way using regular expressions:
(text.split(/\b/).length - 1) / 2
The exact value can differ about 1 word, but it also counts word borders without space, for example "word-word.word". And it doesn't count words that don't contain letters or numbers.
function totalWordCount() {
var str ="My life is happy"
var totalSoFar = 0;
for (var i = 0; i < str.length; i++)
if (str[i] === " ") {
totalSoFar = totalSoFar+1;
}
totalSoFar = totalSoFar+ 1;
return totalSoFar
}
console.log(totalWordCount());
참고URL : https://stackoverflow.com/questions/18679576/counting-words-in-string
'developer tip' 카테고리의 다른 글
일반 날짜를 유닉스 타임 스탬프로 변환 (0) | 2020.10.20 |
---|---|
항목에서 슬라이드 슬라이드를 부트 스트랩하는 속도를 어떻게 제어 할 수 있습니까? (0) | 2020.10.20 |
Angular 5-클립 보드에 복사 (0) | 2020.10.20 |
Android를 사용하여 내 애플리케이션에서 Wi-Fi 설정 화면을 호출하려면 어떻게해야합니까? (0) | 2020.10.20 |
IE에서 호환성보기를 비활성화하는 방법 (0) | 2020.10.20 |