将字符串中的单词提取到数组中



我想从字符串中提取所有单词并将它们放在数组中。

我所说的"单词"是指一系列连续的字母。如果我有空格或其他字符,单词将在那里结束。

例如,如果我有这个字符串:

"my name is sil/ves tru, what?is." 

我想要一个这样的数组:

arr[0] = "my";
arr[1] = "name";
arr[2] = "is";
arr[3] = "sil";
arr[4] = "ves";
arr[5] = "tru";
arr[6] = "what";
arr[7] = "is";

这是我目前拥有的:

var str = "my name is sil/ves tru, what?is."; //my string
var i;
var arr = []; 
for (i = 0; i < str.length; i++) { //check all positions
    if ((str[i] >= "a") && (str[i] <= "z")) { //check where string don't have letter and put the word in arr
       //help me here
    } 
}
console.log(arr); //my array with words

您可以使用正则表达式拆分任何连续的非字母序列。

var str = "my name is sil/ves tru, what?is.";
var arr = str.split(/[^a-z]+/i).filter(Boolean); // or .filter(s=>s)
console.log(arr);

使用此

正则表达式/[^a-z]+/gi删除不需要的字符,然后拆分。

var str = "my name is sil/ves tru, what?is.".replace(/[^a-z]+/gi, " ").trim().split(" ");
console.log(str);
.as-console-wrapper { max-height: 100% !important; top: 0; }

这样就可以了。使用正则表达式,您可以按字母以外的所有内容进行拆分,如果使用filter(Boolean),如果句子不以字母结尾,则可以删除数组中的最后一个空项。

let string = "my name is sil/ves tru, what?is.";
let array = string.split(/[^A-Za-z]+/).filter(Boolean);
console.log(array)

你只需要与String.replace() String.trim()String.split()结合使用的正则表达式:

var str =  "my name is sil/ves tru, what?is.";
var ary = str.replace(/[^a-zA-Z ]/g, " ").trim().split(/s+/);
console.log(ary);
/*
  ^              not
  a-zA-z         a through z or A through Z
  g              global find/replace
  
  .trim()        remove leading/trailing space from string
  .split(/s+/)  split the string where there is one or more spaces and return an array 
*/

谢谢大家!!

这是我解决这个问题的方法:

var str = "what am/i doing.      .   j  here 9what";
var i;
var j = 0;
var arr = [];
var temp = "";
for (i = 0; i < str.length; i++) {
    if ((str[i] >= "a") && (str[i] <= "z")) {
        temp = temp + str[i];
    }
    else {
        if (temp == "") {
            continue;
        }
        else {
            arr[j] = temp;
            temp = "";
            j++;
        }
    }
    if ((i == str.length - 1) && ((str[i] >= "a") && (str[i] <= "z"))) {
        arr[j] = temp;
    }
}
console.log(str.length);
console.log(arr);

当然,最优雅/最短的解决方案是使用正则表达式。

根据您的答案,重构if,使用标准else if样式并使用推荐的严格比较运算符=== & !==,更好的"循环"解决方案将是:

var str = "what am/i doing.      .   j  here 9what";
var i;
var j = 0;
var arr = [];
var temp = "";
for (i = 0; i < str.length; i++) {
    if ((str[i] >= "a") && (str[i] <= "z")) {
        temp = temp + str[i];
        if (i === str.length - 1) { arr[j] = temp; } 
    } else if (temp !== "") {
        arr[j] = temp;
        temp = "";
        j++;
    }
}
console.log(str.length);
console.log(arr);

请注意,仅当最后一个字符是字母时,才需要检查输入字符串的末尾(如果已到达最后一个单词,则向数组中添加最后一个单词(。如果最后一个字符不是字母,则最后一个单词已添加到数组中,并且temp为空。


使用较短的赋值运算符+=、允许大写字母的字符串toLowerCase()方法和数组push()方法(从而消除第二个索引变量j(的更好的循环解决方案是:

var str = "What am/I doing.      .   J  here 9what";
var i;
var arr = [];
var temp = "";
for (i = 0; i < str.length; i++) {
    if ((str[i].toLowerCase() >= "a") && (str[i].toLowerCase() <= "z")) {
        temp += str[i];
        if (i === str.length - 1) { arr.push(temp); } 
    } else if (temp !== "") {
        arr.push(temp);
        temp = "";
    }
}
console.log(str.length);
console.log(arr);

相关内容

  • 没有找到相关文章

最新更新