Expressão regular para obter uma string entre parênteses em JavaScript

Eu estou tentando escrever uma expressão regular que retorna uma seqüência de caracteres entre parênteses. Por exemplo: eu quero pegar a string que reside entre as strings “(” e “)”

I expect five hundred dollars ($500). 

retornaria

 $500 

Expressão Regular Encontrada para obter uma string entre duas strings em Javascript

Mas eu sou novo com regex. Eu não sei como usar ‘(‘, ‘)’ no regexp

Você precisa criar um conjunto de parênteses escapados (com \ ) (que correspondam aos parênteses) e um grupo de parênteses regulares que criam seu grupo de captura:

 var regExp = /\(([^)]+)\)/; var matches = regExp.exec("I expect five hundred dollars ($500)."); //matches[1] contains the value between the parentheses console.log(matches[1]); 

Demolir:

  • \( : combina os parênteses de abertura
  • ( : começa a capturar grupo
  • [^)]+ : corresponde a um ou mais não ) caracteres
  • ) : final capturando grupo
  • \) : parênteses de fechamento de correspondência

Aqui está uma explicação visual sobre RegExplained

Tente a manipulação de string:

 var txt = "I expect five hundred dollars ($500). and new brackets ($600)"; var newTxt = txt.split('('); for (var i = 1; i < newTxt.length; i++) { console.log(newTxt[i].split(')')[0]); } 

ou regex ( que é um pouco lento em comparação com o acima )

 var txt = "I expect five hundred dollars ($500). and new brackets ($600)"; var regExp = /\(([^)]+)\)/g; var matches = txt.match(regExp); for (var i = 0; i < matches.length; i++) { var str = matches[i]; console.log(str.substring(1, str.length - 1)); } 

Portou a resposta de Mr_Green para um estilo de functional programming para evitar o uso de variables ​​globais temporárias.

 var matches = string2.split('[') .filter(function(v){ return v.indexOf(']') > -1}) .map( function(value) { return value.split(']')[0] }) 

Para apenas dígitos após um sinal de moeda: \(.+\s*\d+\s*\) deve funcionar

Ou \(.+\) Para qualquer coisa entre colchetes

Para corresponder uma substring dentro de parênteses excluindo quaisquer parênteses internos que você possa usar

 \(([^()]*)\) 

padronizar. Veja a demonstração do regex .

Em JavaScript, use-o como

 var rx = /\(([^()]*)\)/g; 

Detalhes do padrão

  • \( – a ( char
  • ([^()]*) – Capturando grupo 1: uma class de caractere negada combinando com 0 ou mais caracteres diferentes de ( e )
  • \) – a ) char.

Para obter a partida inteira, pegue o valor do Grupo 0, se precisar do texto entre parênteses, pegue o valor do Grupo 1:

 var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."]; var rx = /\(([^()]*)\)/g; for (var i=0;i 

Solução simples

Aviso : esta solução usada para string que tem apenas uma única string “(” e “)” nessa questão.

 ("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop(); 

Demonstração online (jsfiddle)

 var str = "I expect five hundred dollars ($500) ($1)."; var rex = /\$\d+(?=\))/; alert(rex.exec(str)); 

Combinará o primeiro número começando com $ e seguido por ‘)’. ‘)’ não fará parte do jogo. O código alerta com a primeira correspondência.

 var str = "I expect five hundred dollars ($500) ($1)."; var rex = /\$\d+(?=\))/g; var matches = str.match(rex); for (var i = 0; i < matches.length; i++) { alert(matches[i]); } 

Este código alerta com todas as correspondências.

Referências:

procurar "? = n" http://www.w3schools.com/jsref/jsref_obj_regexp.asp

procurar por "x (? = y)" https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp