0

関数に渡された文字で始まる配列からのすべての項目を選択ボックスに入力する必要があるjavascript関数があります。私が抱えている唯一の問題は、正規表現ステートメント/コーディングを機能させることができないことです。これが私の関数です:

function replaceCompanySelect (letter)
{

var list = document.getElementById("company");  //Declare the select box as a variable
list.options.length=0;  //Delete the existing options

list.options[0]=new Option("Please Select a Company", "0", false, false); //Add the first option in

for(var i=1;i<companies.length;i++)  //For each company in the array
{

    if(companies[i].match("/\b"+letter+"/g") != null && (letter != 'undefined' ||letter != 'undefined'))  //If the company starts with the correct letter and the position's value is not undefined or empty
    {

        alert(companies[i]); //Only used for testing purposes, code should be as above loop to I used to insert the 1st option

    }

}

}

何か案は?

4

4 に答える 4

1

これは機能し、RegExがなくても機能します。

if (companies[i].charAt(0).toLowerCase() == letter.toLowerCase()) {...}
于 2012-05-09T13:43:03.030 に答える
0

正規表現を気にしません。問題を作成するだけです。このようなものが機能します。

var companies  = ["microsoft","apple","google"],
    startsWith = function(arr,match){

        var length = arr.length;

        for(var i=0; i < length; i+=1){

            if(arr[i].toUpperCase().lastIndexOf(match.toUpperCase(), 0) === 0){

                return arr[i];                           
            }

        }
    };

console.log(startsWith(companies,"g")); //=> returns google
于 2012-05-09T13:50:51.137 に答える
0

これは、正規表現なしで行う方が実際にはおそらくより効率的です(もちろん、これはマイクロ最適化としてカウントされます...)。私は次のようなことをします:

if (letter && companies[i][0].toLowerCase() === letter.toLowerCase()) { ... }
于 2012-05-09T13:42:52.790 に答える
0

何かのようなもの?

function foo (letter) {
 var companies  = ["microsoft","apple","google"];
  return companies.filter(function(s) { return s.match(new RegExp(letter,"ig")); });
}

alert(foo("G")); //google
于 2012-05-10T15:03:30.203 に答える