2012-05-18 2 views
0

Я получил этот код для подсчета количества слов из редактора html.javascript regex для подсчета слов

(providing htmlData has already been set) 
var rawWords = htmlData.replace(/<(?:.|\s)*?>/g, '') 
         .replace(/(\r\n|\n|\r)/gm,' '); 
var filteredWords = rawWords.replace(/\[([^\]]+)\]/g,'') 
          .replace(/\s+/g, " ") 
          .replace(/^\s+|\s+$/g, ""); 

Из чего я понимаю, первая строка удаляет html, а затем удаляет любые возвращаемые значения.

Следующая строка удаляет что-нибудь в скобках (это добавлять заметки без влияния на количество слов), а затем удаляет лишние пробелы

Но если я этого типа:

Apple 


Charlie 

Tom 

Это дает мне слово количество 6, а не 3. Любая идея, почему? Я не хорош в регулярном выражении !!!!

Большое спасибо

+0

Где функция, которая действительно считает слова? – joe92

+0

Вероятно, счетчик слов делает разделение на пробелы. то есть 6 строк = 6 слов. – ansiart

ответ

1

Попробуйте, это просто, просто разбивает пробельные/число, и подсчитывает массив.

window.onload = function() { 

    // get string as text 
    var text = document.body.innerText; 

    // replace all non letters (so we don't count 1 as a word) 
    text  = text.replace(/[^a-zA-Z\s]/g, ''); 

    // split on whitespace 
    var words = text.split(/[\s]+/); 

    // output -- 52 
    console.log('numwords', words, words.length); // numwords 52 
} 

полный пример ниже:

<html> 
<head> 
<script type="text/javascript">// script</script> 
</head> 
<body> 

a b c d e f g 
1 1 1 1 1 1 1 




the quick brown fox jumped over the lazy dog. 
the quick brown fox jumped over the lazy dog. 
the quick brown fox jumped over the lazy dog.<br><br><br><br><br> 
the quick brown fox jumped over the lazy dog. 
the quick brown fox jumped over the lazy dog. 

</body> 
</html> 
1

Эти регулярные выражения некрасиво и излишним. Мой совет должен был бы получить очищенную до HTML, делая что-то вроде:

var a=document.createElement('div') 
a.innerHTML=htmlData; 
textData=a.innerText 

затем петли через это с помощью простого регулярного выражения и увеличиваем счетчик:

var patt=new RegExp(/(^|\W)(\w+)($|\W)/g); 
var counter=0; 
var result=patt.exec(textData); 
while(result!=null) { 
    counter++; 
    result=patt.exec(textData); 
} 

Это очень сырой (и делает много предположений, которые могут не сработать для вас). НО, A/вы получите встречное количество «слов» [определение которых вы должны будете работать], а B/вам не нужно заменять и удалите огромное количество текста, прежде чем получить то, что вы заявили, что хотите.

НТН

0

Замена пространства с "" не worj этот путь. попробовать:

.replace(/[ ]{2,}/gi," "); /*{2,}=repeated*/ 
.replace(/(^\s*)|(\s*$)/gi,""); 

вместо:

.replace(/\s+/g, " ") 
.replace(/^\s+|\s+$/g, ""); 

и он должен работать нормально.

Смежные вопросы