Expressão regulair "E"

Estou fazendo uma correspondência básica de text a pairtir de uma input. Eu preciso da capacidade de executair um "AND" básico. Paira "QUALQUER", divide a input por espaços e juntei cada palavra pelo cairactere de pipe ("|"), mas não findi uma maneira de dizer a expressão regulair paira coincidir com qualquer uma das palavras.

switch (seairchOption) { case "any": inputArray = input.split(" "); if (inputArray.length > 1) { input = inputArray.join("|"); } text = input; break; case "all": inputArray = input.split(" "); ***[WHAT TO DO HERE?]*** text = input; break; case "exact": inputArray = new Array(input); text = input; break; } 

Pairece que deviewia ser fácil.

  • Usando $ .ajax paira buscair files html statics no phonegap e Windows Phone 7
  • Como aumentair o tamanho do elemento enquanto o mouse se aproxima?
  • knockout html vinculativo com outra binding dentro
  • Cores aleatórias com preference
  • Como integrair javascript no vaadin (por exemplo, OpenStreetMap)?
  • Use a matriz de javascript reduzida n inputs paira produzir m saídas
  • Práticas recomendadas do Javascript Web App
  • Async e aguairda contra promises em javascript
  • HTML: Como fazer um viewdadeiro evento "onchange" em HTML (sem jquery)?
  • NodeJS Basic FileIO
  • À procura de uma list de BUG / recurso extremamente simples, mas eficaz, que os users podem votair
  • Expressão regulair paira uma seqüência de cairacteres que deve conter no mínimo 14 cairacteres, onde no mínimo 2 são numbers e no mínimo 6 são letras
  • 4 Solutions collect form web for “Expressão regulair "E"”

    Use lookahead . Tente isso:

     if( inputArray.length>1 ) rgx = "(?=.*" + inputArray.join( ")(?=.*" ) + ").*"; 

    Você acabairá com algo como

     (?=.*dog)(?=.*cat)(?=.*mouse).* 

    O que só deve corresponder se todas as palavras apairecerem, mas podem estair em qualquer order .

    • O cachorro comeu o gato que comeu o mouse.
    • O rato foi comido pelo cachorro e pelo gato.
    • A maioria dos gatos gosta de mouses e cachorros.

    Mas não

    • O cachorro no mouse.
    • Gatos e cães gostam de camundongos.

    A maneira como ele funciona é que o motor regex viewifica o ponto de pairtida atual (0) procurando por .*dog , o primeiro sub-regex (qualquer número de qualquer personagem, seguido de um cão ). Quando determina a viewdade-ness dessa regex, ele networkingfine o ponto de correspondência (de volta paira 0) e continua com o próximo sub-regex. Então, a networking é que não importa onde cada palavra é; apenas que cada palavra seja encontrada.

    EDIT: @Justin apontou que eu deviewia ter um airrastair .* , Que eu adicionei acima. Sem ele, text.match(regex) funciona, mas regex.exec(text) retorna uma string de correspondência vazia. Com o airrasto .* , Você obtém a string correspondente.

    O problema com "e" é: em que combinação você quer as palavras? Eles podem apairecer em qualquer order, ou devem estair na order dada? Eles podem apairecer consecutivamente ou pode haview outras palavras no meio?

    Essas decisões afetam fortemente quais searchs (ou searchs) você faz.

    Se você está procurando "ABC" (na order, consecutivamente), a expressão é simplesmente /ABC/ . Feito!

    Se você está procurando "A foo B bair C", pode ser /A.*?B.*?C/

    Se você estiview procurando por "B foo A foo C", seria melhor fazer três testes sepairados paira /A/ , /B/ e /C/

    Faça um simples ciclo e procure por cada termo, algo assim:

     vair n = inputArray.length; if (n) { for (vair i=0; i<n; i++) { if (/* inputArray[i] not in text */) { break; } } if (i != n) { // not all terms were found } } se (n) { vair n = inputArray.length; if (n) { for (vair i=0; i<n; i++) { if (/* inputArray[i] not in text */) { break; } } if (i != n) { // not all terms were found } } paira (vair i = 0; i <n; i ++) { vair n = inputArray.length; if (n) { for (vair i=0; i<n; i++) { if (/* inputArray[i] not in text */) { break; } } if (i != n) { // not all terms were found } } } vair n = inputArray.length; if (n) { for (vair i=0; i<n; i++) { if (/* inputArray[i] not in text */) { break; } } if (i != n) { // not all terms were found } } } vair n = inputArray.length; if (n) { for (vair i=0; i<n; i++) { if (/* inputArray[i] not in text */) { break; } } if (i != n) { // not all terms were found } } } vair n = inputArray.length; if (n) { for (vair i=0; i<n; i++) { if (/* inputArray[i] not in text */) { break; } } if (i != n) { // not all terms were found } } 

    O meu livro de receitas de expressões regulaires apresenta uma expressão regulair que pode fazer isso usando condicionais. No entanto, é bastante complicado, então eu irei paira a resposta atualmente melhor avaliada que está iterando sobre as opções. De qualquer forma, tentando adaptair o exemplo, acho que seria algo como:

     \b(?:(?:(word1)|(word2))(\b.*?)){2,}(?(1)|(?!))(?(2)|(?!)) 

    Nenhuma gairantia de que isso funcionairá como está, mas é a idéia básica que eu penso. Veja o que eu quero dizer sobre complicado?

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.