Вопрос

На основании этого ответа

Регулярные выражения: есть ли и оператор?

Я попробовал следующее на http://regexpal.com/ Но не смог добраться до работы. Что не хватает? JavaScript не поддерживает это?

Regex: (?=foo)(?=baz)

Нить: foo,bar,baz

Это было полезно?

Решение

Это невозможно для обоих (?=foo) а также (?=baz) соответствовать одновременно. Это потребует следующего персонажа, чтобы быть оба f а также b одновременно что невозможно.

Возможно, вы хотите это вместо этого:

(?=.*foo)(?=.*baz)

Это говорит о том, что foo должен появиться где угодно и baz Должен появиться в любом месте, не обязательно в этом порядке и, возможно, перекрытие (хотя перекрытие невозможно в этом конкретном случае, потому что буквы сами не перекрываются).

Другие советы

Пример булевой (и) плюс поиск подстановки, который я использую внутри плагина AutoComplete JavaScript:

Строка, чтобы соответствовать: «Мое слово»

Строка для поиска: «Я ищу свои забавные слова в этом тексте»

Вам нужно следующее Regex:/^(?=.*my)(?=.*word).*$/im

Объяснение:

^ Устанавливать позицию в начале строки

?= Положительный вид

.* соответствует любому символу (кроме новой строки)

() Группы

$ Устанавливать позицию в конце строки

я Модификатор: нечувствителен. Нечувствительное дело (игнорирует случай [A-ZA-Z])

М. Модификатор: многострочный. Причины ^ и $, чтобы сопоставить начало / конец каждой строки (не только начало / конец строки)

Проверьте регельс здесь: https://regex101.com/r/is5jj3/1.

Итак, вы можете создать функцию JavaScript, которая:

  1. Замените Regex зарезервированные символы, чтобы избежать ошибок
  2. Разделить свою строку в пробелах
  3. Инкапсулировать ваши слова внутри групп Regex
  4. Создать рисунок Regex
  5. Выполнить матч Regex

Пример:

function fullTextCompare(myWords, toMatch){
    //Replace regex reserved characters
    myWords=myWords.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    //Split your string at spaces
    arrWords = myWords.split(" ");
    //Encapsulate your words inside regex groups
    arrWords = $.map( arrWords, function( n ) {
        return ["(?=.*"+n+")"];
    });
    //Create a regex pattern
    sRegex = new RegExp("^"+arrWords.join("")+".*$","im");
    //Execute the regex match
    return(toMatch.match(sRegex)===null?false:true);
}

//Using it:
console.log(
    fullTextCompare("my word","I'm searching for my funny words inside this text")
);

//Wildcards:
console.log(
    fullTextCompare("y wo","I'm searching for my funny words inside this text")
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Может быть, просто или оператор | может быть достаточно для вашей проблемы:

Нить: foo,bar,baz

Regex: (foo)|(baz)

Результат: ["foo", "baz"]

Может быть, вы ищете что-то вроде этого. Если вы хотите выбрать полную строку, когда она содержит как «Foo», так и «BAZ» одновременно, это Regex будет соответствовать, что:

.*(foo)+.*(baz)+|.*(baz)+.*(foo)+.*

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top