Gostaria de criar um String.replaceAll()
método em JavaScript e estou pensando que usar um regex seria a maneira mais concisa de fazê-lo. No entanto, não consigo descobrir como passar uma variável para uma regex. Eu posso fazer isso já que irá substituir todas as instâncias de "B"
com "A"
.
"ABABAB".replace(/B/g, "A");
Mas eu quero fazer algo assim:
String.prototype.replaceAll = function(replaceThis, withThis) {
this.replace(/replaceThis/g, withThis);
};
Mas, obviamente, isso substituirá apenas o texto "replaceThis"
... então, como passo essa variável para minha string regex?
javascript
regex
JC Grubbs
fonte
fonte
Respostas:
Em vez de usar a
/regex/g
sintaxe, você pode construir um novo objeto RegExp :Você pode criar dinamicamente objetos regex dessa maneira. Então você fará:
fonte
/\/word\:\w*$/
, certifique-se de escapar de seus barras invertidas:new RegExp( '\\/word\\:\\w*$' )
./
não tem significado especial se você construir regex a partir de uma string, para que você não precise escapar dela./\/word\:\w*$/
deveria sernew RegExp('/word\\:\\w*$')
Como Eric Wendelin mencionou, você pode fazer algo assim:
Isso gera
"regex matching ."
. No entanto, ele falhará se str1 for"."
. Você esperaria que o resultado fosse"pattern matching regex"
, substituindo o período por"regex"
, mas acabará sendo ...Isso ocorre porque, embora
"."
seja uma String, no construtor RegExp ainda é interpretado como uma expressão regular, significando qualquer caractere que não seja de quebra de linha, ou seja, todos os caracteres da string. Para esse fim, a seguinte função pode ser útil:Então você pode fazer:
cedendo
"pattern matching regex"
.fonte
-
e incluem=!:/
.Como sempre: não use regex a menos que você precise. Para uma substituição simples de cadeia, o idioma é:
Então você não precisa se preocupar com os problemas de citação mencionados na resposta do Gracenotes.
fonte
split
ereplace
podem pegar uma string ou umRegExp
objeto. O problema quereplace
tem issosplit
não é que, quando você usa uma string, obtém apenas uma única substituição.Se você deseja obter TODAS as ocorrências (
g
), faça distinção entre maiúsculas e minúsculas (i
) e use limites para que não seja uma palavra dentro de outra palavra (\\b
):Exemplo:
fonte
rx
interpolação Emacs / style, por meio de strings de modelo.)Para quem procura usar variável com o método match , isso funcionou para mim
fonte
Este:
é equivalente a isso:
Consulte http://www.w3schools.com/jsref/jsref_obj_regexp.asp .
fonte
pattern
como variável, no 2º como uma stringfonte
Você deseja construir a expressão regular dinamicamente e, para isso, a solução adequada é usar o
new RegExp(string)
construtor. Para que o construtor trate caracteres especiais literalmente , você deve escapar deles. Há uma função interna no widget de preenchimento automático da UI do jQuery chamada$.ui.autocomplete.escapeRegex
:Se você estiver usando a interface do usuário do jQuery, poderá usar essa função ou copiar sua definição da fonte :
E use-o assim:
fonte
Teste com esta ferramenta
fonte
Teste como:
fonte
Aqui está outra implementação replaceAll:
fonte
E a versão coffeescript da resposta de Steven Penny, já que este é o resultado # 2 do google .... mesmo que o café seja apenas javascript com muitos caracteres removidos ...;)
e no meu caso particular
fonte
robot.name=hubot
não é javascript.Embora você possa criar RegExp criados dinamicamente (conforme as outras respostas a esta pergunta), repetirei meu comentário em um post semelhante : A forma funcional de String.replace () é extremamente útil e, em muitos casos, reduz a necessidade de objetos RegExp criados dinamicamente. (que é meio doloroso porque você precisa expressar a entrada para o construtor RegExp como uma sequência de caracteres, em vez de usar o formato literal de barras / [AZ] + / regexp)
fonte
Para satisfazer minha necessidade de inserir uma variável / alias / function em uma Expressão Regular, é isso que eu criei:
onde 'oldre' é o regexp original que eu quero inserir uma variável, 'xx' é o espaço reservado para essa variável / alias / function e 'yy' é o nome, o alias ou a função real da variável.
fonte
Você pode usar isso se $ 1 não funcionar com você
fonte
Você sempre pode usar
indexOf
repetidamente:Isso não entra em um loop infinito quando a substituição contém a correspondência.
fonte
Sua solução está aqui:
Passe uma variável para expressão regular.
O que eu implementei é pegar o valor de um campo de texto que você deseja substituir e outro é o campo de texto "substituir por", obtendo o valor do campo de texto em uma variável e definindo a variável como RegExp função para substituir ainda mais. No meu caso, estou usando o Jquery, você também pode fazê-lo apenas com JavaScript.
Código JavaScript:
Este código está no evento Onclick de um botão, você pode colocar isso em uma função para chamar.
Então agora você pode passar variáveis na função de substituição.
fonte
Essa função de auto-chamada itera sobre o substiterItems usando um índice e altera o substituerItems [index] globalmente na cadeia a cada passagem.
fonte
Nenhuma dessas respostas estava clara para mim. Acabei encontrando uma boa explicação em http://burnignorance.com/php-programming-tips/how-to-use-a-variable-in-replace-function-of-javascript/
A resposta simples é:
Por exemplo:
fonte
var
aqui. Além disso, se você passar\b
ou\1
ele iria quebrar.Para substituição múltipla sem expressões regulares, fui com o seguinte:
A parte importante da solução foi encontrada aqui
fonte