Шаблон регулярных выражений Javascript - PullRequest
0 голосов
/ 11 июня 2009

У меня есть поле со списком и поле ввода. Если я введу любую букву в поле ввода, то все слова или предложения, соответствующие этой букве, должны отобразиться в поле со списком, если предположить, что список слов или предложений содержится в списке.

ex1:)  input box: a
       combo box : America 
                   Australia
                   joy is in Austria

Для этого примера я хочу шаблоны регулярных выражений JavaScript. Кто-нибудь дать мне предложение.

Ответы [ 4 ]

2 голосов
/ 11 июня 2009

Не уверен, что я точно понимаю, что вы просите, но я думаю, что вы не хотите регулярное выражение, вы просто хотите JQuery:

Как это:

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script>
        $j = jQuery.noConflict();

        $j(document).ready(init);

        function init()
        {
            $j('#MyEditBox').change( filterCombo ).keyup( filterCombo );
        }

        function filterCombo()
        {
            var InputText = $j(this).val();
            $j('#MyCombo option:not(:contains('+ InputText +'))').hide();
            $j('#MyCombo option:contains('+ InputText +')').show();
        }
    </script>
</head>
<body>
    <input type="text" id="MyEditBox" />
    <select multiple id="MyCombo">
        <option>America
        <option>Australia
        <option>Something else
        <option>Joy is in Austria
        <option>Wibble
    </select>
</html>


Обновление: Это будет соответствовать только целым словам:

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script>
        $j = jQuery.noConflict();


        $j(document).ready(init);


        function init()
        {
            $j('#MyEditBox').change( filterCombo ).keyup( filterCombo );
        }


        function filterCombo()
        {
            var InputText = $j(this).val();

            if (InputText.length > 0)
            {
                $j('#MyCombo option')
                    .hide()
                    .filter(function() { return hasWholeWord( $j(this).val() , InputText ) })
                    .show()
                    ;
            }
            else
            {
                $j('#MyCombo option').show();
            }
        }


        function hasWholeWord( Text , Word )
        {
            return (new RegExp('\\b'+Word+'\\b','i').test( Text ));
        }
    </script>
</head>
<body>
    <input type="text" id="MyEditBox" value="" />
    <select multiple id="MyCombo">
        <option>America
        <option>Australia
        <option>Something else
        <option>Joy is in Austria
        <option>Wibble
    </select>
</html>
0 голосов
/ 11 июня 2009

Для простого соответствия подстроки вам не нужно регулярное выражение, достаточно простого myString.indexOf(inputString). Для нечувствительных к регистру вы можете сделать myString.toUpperCase().indexOf(inputString.toUpperCase()).

0 голосов
/ 11 июня 2009

Я думаю, это немного зависит от того, откуда вы хотите соответствовать. В вашем примере буква «а» совпадает как в начале, так и в конце слова «Америка», достаточно ли этого совпадения?

В зависимости от того, как вы хотите фильтровать свои данные, вы можете использовать jLinq ( Отказ от ответственности: Мой проект :) )

В зависимости от того, где вы хотите найти совпадение, вы можете использовать опцию '\ b', чтобы попытаться ограничить источник приемлемого совпадения ...

\ ba - Совпадение 'a' с самого начала

a \ b - соответствует 'a' с конца

Кроме того, если вас интересует значение совпадения, вы можете использовать что-то вроде следующего ...

(? <1> \ ba \ w +) - Это немного сложнее для чтения, но это соответствует всему, что начинается с 'a', но также возвращает все слово как группу внутри матч.

0 голосов
/ 11 июня 2009

При вводе слова поместите его в границу слова. Просто замените часть [слово здесь] ниже вводом текста из текстового поля.

Выражение будет:

\b[word here]\b

Кроме того, вот хороший тестер регулярных выражений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...