Estou tentando obter uma pesquisa que não diferencia maiúsculas de minúsculas com duas seqüências de caracteres em JavaScript funcionando.
Normalmente, seria assim:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
A /i
bandeira não diferencia maiúsculas de minúsculas.
Mas preciso procurar uma segunda string; sem a bandeira funciona perfeitamente:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
Se eu adicionar o /i
sinalizador ao exemplo acima, ele procuraria pela string de pesquisa e não pelo que está na variável "searchstring" (o próximo exemplo não está funcionando):
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
Como posso conseguir isso?
fonte
string.match(/best/i);
.match
para comparação booleana? Ele procura além do primeiro resultado. Você precisa parar após a primeira partida que.test
ou.search
fazer. Verifique o desempenho aqui .toLowerCase
provavelmente falhará no Teste da Turquia ( moserware.com/2008/02/does-your-code-pass-turkey-test.html ) e em problemas de conversão de casos semelhantes. Não sei comoReGex
lidar com isso, mas se eu tivesse que adivinhar, diria melhor.var text = "best"; var exp = new RegExp(test, "i");
. É o mesmo que/best/i
.Substituir
com
fonte
s = 'a[b'; r = new RegExp(s)
resulta em um erro de sintaxe (classe de caracteres não terminada)Se você estiver apenas procurando por uma string em vez de uma expressão regular mais complicada, poderá usar
indexOf()
- mas lembre-se de minúsculas as duas strings primeiro porqueindexOf()
diferencia maiúsculas de minúsculas:Ou em uma única linha:
fonte
Suponha que desejamos encontrar a variável string
needle
na variável stringhaystack
. Existem três dicas:string.toUpperCase
estring.toLowerCase
. Use uma expressão regular que ignore maiúsculas e minúsculas. Por exemplo,var needleRegExp = new RegExp(needle, "i");
seguido porneedleRegExp.test(haystack)
.needle
. Cuidado paraneedle
não conter caracteres especiais de expressão regular . Fuja deles usandoneedle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
.needle
ehaystack
, apenas ignorando o caso, adicione"^"
-o no início e"$"
no final do construtor de expressões regulares.Levando em consideração os pontos (1) e (2), um exemplo seria:
fonte
ES6 +:
includes()
retornatrue
sesearchString
aparecer em uma ou mais posições oufalse
não.fonte
Se você estiver preocupado com o caso "classe de caracteres não terminados", remover todos os caracteres não alfanuméricos seria útil:
fonte
Gosto da resposta do @ CHR15TO, ao contrário de outras respostas que já vi em outras perguntas semelhantes, essa resposta realmente mostra como escapar adequadamente uma sequência de pesquisa fornecida pelo usuário (em vez de dizer que seria necessário sem mostrar como).
No entanto, ainda é bastante desajeitado e possivelmente relativamente mais lento. Então, por que não ter uma solução específica para o que é provavelmente um requisito comum para codificadores? (E por que não incluí-lo na ES6 API BTW?)
Minha resposta [ https://stackoverflow.com/a/38290557/887092] em uma pergunta semelhante permite o seguinte:
fonte
Existem duas maneiras de comparação sem distinção entre maiúsculas e minúsculas:
Converta seqüências de caracteres em maiúsculas e compare-as usando o operador strict (
===
). Como o operador rigoroso trata os operandos lê o material em: http://www.thesstech.com/javascript/relational-logical-operatorsCorrespondência de padrões usando métodos de string:
Use o método de string "search" para pesquisa que não diferencia maiúsculas de minúsculas. Leia sobre a pesquisa e outros métodos de string em: http://www.thesstech.com/pattern-matching-using-string-methods
fonte
Faço isso com frequência e uso um protótipo simples de 5 linhas que aceita varargs. É rápido e funciona em qualquer lugar .
fonte
Você pode fazer tudo em minúsculas:
fonte
Percebi que se o usuário digitar uma sequência de texto, mas deixar a entrada sem selecionar nenhuma das opções de preenchimento automático, nenhum valor será definido na entrada oculta, mesmo que a sequência coincida com a da matriz. Então, com a ajuda das outras respostas, eu fiz isso:
fonte