0
function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i < str.length; i++) {
        var checkedLetters = "";
        for (var j = 0; j < str[j].length; j++) {
            if (j == /[^a-zA-Z]/) {
                checkedLetters += j;
            }
        if (longest < checkedLetters.length) {
            longest = checkedLetters.length;
            word = checkedLetters;
           }
        }
    }
    return word;
}

我使用正则表达式有什么问题吗?当我调用longestWord("Hello, I am here") 时,我希望它返回"Hello"(不带逗号),但它返回null。

4

4 回答 4

5

刚刚写了这个小片段,可能会对您有所帮助:

function longestWord(string){
    return string.match(/[a-zA-Z]+/g)
               .reduce(function(a,b){
                    return a.length>=b.length?a:b;
               })
}

/[a-zA-Z]+/g匹配字符串中的所有单词,并返回它们的数组。当运行此 RegEx 时,您上面的 ( ) 测试字符串"Hello, I am here"将变为。["Hello","I","am","here"]

一旦我有了这个数组,只需遍历它即可找到最长的单词。我通过使用.reduce.

于 2013-06-30T04:42:43.160 回答
2

您的代码中有一些错误:

for (var j = 0; j < str[j].length; j++) {

应该

 for (var j = 0; j < str[i].length; j++) {

if (j == /[^a-zA-Z]/) {

应该:

if (/[a-zA-Z]/.test(str[i][j])) {

您的最终代码应为:

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i < str.length; i++) {
        var checkedLetters = "";
        for (var j = 0; j < str[i].length; j++) {
            if (/[a-zA-Z]/.test(str[i][j])) {
                checkedLetters += str[i][j];
            }
        }
        if (longest < checkedLetters.length) {
            longest = checkedLetters.length;
            word = checkedLetters;
        }
    }
    return word;
}

检查演示

于 2013-06-30T04:44:49.523 回答
1

您如何使用正则表达式的一个大(非拼写错误)问题是该方法是.test; ==将测试字符串是否等于正则表达式的字符串表示。

只需使用.match一点点sort魔法!

function longestWord(string){
    var words = string.match(/\w+/g);
    words.sort(function(a, b) { return b.length - a.length; });
    // Firefox 22.0 promotion:
    // words.sort((a, b) => a.length - b.length);

    return words[0];
}
于 2013-06-30T04:52:51.373 回答
0

您不需要使用正则表达式,只需使用 .length 来搜索最长的字符串。

IE

function longestWord(string) {

    var str = string.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,"").split(" ");
    longest = str[0].length;
    longestWord = str[0];

    for (var i = 1; i < str.length; i++) {
        if (longest < str[i].length) {
            longest = str[i].length;
            longestWord= str[i];
           }
        }

return longestWord;
}

编辑:你必须使用一些正则表达式......

于 2013-06-30T04:56:34.840 回答