2012-05-09 2 views
0

У меня есть функция javascript, которая должна заполнять поле выбора всеми элементами из массива, начиная с буквы, переданной функции. Единственная проблема, с которой я сталкиваюсь, это то, что я не могу заставить свою инструкцию/кодировку regex работать. Вот моя функция:Javascript regex все имена, начиная с

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 

    } 

} 

} 

Любые идеи?

+0

Не ответ, а вопрос: почему письмо должно иметь значение «undefined»? –

+0

Поскольку числа в массиве соответствуют номерам идентификаторов непосредственно из базы данных, будут указаны некоторые цифры, которые не имеют значений –

+1

Вы не уверены, что вы не имеете в виду 'typeof letter == 'undefined''? Зачем это делать два раза? '(letter! = 'undefined' || letter! = 'undefined')' –

ответ

1

Это работает, и без RegEx, тоже:

if (companies[i].charAt(0).toLowerCase() == letter.toLowerCase()) {...} 
0

Это на самом деле, вероятно, более эффективно делать без регулярных выражений (предоставлено, это будет считаться микро-оптимизацией, хотя ...). Я бы просто сделать что-то вроде:

if (letter && companies[i][0].toLowerCase() === letter.toLowerCase()) { ... } 
+0

Я думаю, вы может хотеть 'компании [i] .charAt (0)', нет? –

+0

'.charAt (0)' работает, но к символам также можно получить доступ, используя синтаксис априорного доступа (что бывает короче). – jmar777

+0

Ах, право. Я знал это ... :) –

0

Я бы не заморачиваться с регулярным выражением. Вы просто создадите проблемы. Что-то вроде этого будет работать.

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