Я написал программу, которая извлекает текст с заданной веб-страницы.
Я использовал .split, чтобы поместить слова в массив. Я хотел бы удалить любое слово, которое не начинается с буквы, например. 5X не будет классифицироваться как слово, но X5 будет.
Мой код не работает.
function getWords(node) {
var text = node.innerText;
output.textContent = inputValidation(text)
}
function inputValidation(text) {
var wordData = text.split();
for (i in wordData) {
if (isLetter(i[0] == False)) {
wordData.splice(i, 1);
}
} return wordData
}
function isLetter(str) {
return str.length === 1 && str.match(/[a-z]/i);
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Измените свой isLetter на
function isLetter(str) {
if (str.match(/^\d/)) {
return true;
}
return false;
}
Вы можете легко упаковать это в фильтр, например:
let output = document.querySelector("#output");
getWords(document.querySelector("p"));
function getWords(node) {
let text = node.innerText;
output.textContent = text.split(" ").filter(word => word[0].toLowerCase().match(/[a-z]{1}/));
}<p>Hello world! Click here Goodbye world! X7 9x</p>
<p id = "output"></p>Как вы можете видеть из только что сделанного мной редактирования, он также работает с ними.
спасибо, это должно быть ошибка в моем коде. Я использую текстовые узлы для извлечения текста.
Ох, хорошо. Я предположил, что node относится к узлам DOM, и что вы использовали элементы HTML.
В конце концов я заставил его работать, удалив лишние пробелы из текста с отступом с помощью text.split (/ \ s + / g)
Ваш код кажется неправильным, поскольку вы передаете значение boolean в функции isLetter как isLetter(i[0] == False), что снова неверно, поскольку F должен быть в нижнем регистре, то есть false. В вашем коде много ошибок, но вы можете использовать parseInt() и isNaN(), чтобы убедиться, что все слово начинается с символа или цифры.
//when you have a letter as a first character
var word = 'X5';
var isLetter = isNaN(parseInt(word));
console.info(isLetter);
//when you dont have a letter as a first character
word = '5ABC';
isLetter = isNaN(parseInt(word));
console.info(isLetter);Я думаю, проблема в этой строке кода
if (isLetter(i[0] == False)) {
должно быть
if (isLetter(i[0]) == False) {
или лучше
if (!isLetter(i[0])) {
Я внес поправки в это, но не исправил. Спасибо.
Пример:
var text = "abc def 10hij kl 3GH";
var splitedtext=text.split(" ");
var dummyarray=[];
for(var i=0;i<splitedtext.length;i++){
var thistext=parseInt(splitedtext[i]);
if ( thistext.toString() == "NaN" ){
dummyarray.push(splitedtext[i]);
}
}
$("body").html(dummyarray.join(" "));
демонстрация jsfiddle: http://jsfiddle.net/geogeorge/hztdxv4w/2/
Привет спасибо за вашу помощь. Используя ваш код, он переходит от «Hello world! Click here Goodbye world! X7 9x» к «Hello, world!, Here, world!, X7», так что по какой-то причине он пропускает несколько слов. Он успешно пропускает неправильное слово.