Espressione regolare per ottenere una stringa tra parentesi in Javascript

Sto cercando di scrivere un’espressione regolare che restituisca una stringa tra parentesi. Ad esempio: voglio ottenere la stringa che risiede tra le stringhe “(” e “)”

I expect five hundred dollars ($500). 

sarebbe tornato

 $500 

Trovato espressione regolare per ottenere una stringa tra due stringhe in Javascript

Ma sono nuovo con regex. Non so come usare ‘(‘, ‘)’ in regexp

È necessario creare un set di parentesi con escape (con \ ) (che corrispondono alle parentesi) e un gruppo di parentesi regolari che creano il gruppo di cattura:

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

Abbattersi:

  • \( : corrisponde a una parentesi di apertura
  • ( : inizia a catturare il gruppo
  • [^)]+ : corrisponde a uno o più caratteri non )
  • ) : gruppo che cattura la fine
  • \) : abbina le parentesi di chiusura

Ecco una spiegazione visiva su RegExplained

Prova la manipolazione delle stringhe:

 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]); } 

o regex ( che è un po ' lento confrontare con quanto sopra )

 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)); } 

Portato la risposta di Mr_Green a uno stile di programmazione funzionale per evitare l’uso di variabili globali temporanee.

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

Solo per le cifre dopo un segno di valuta: \(.+\s*\d+\s*\) dovrebbe funzionare

Oppure \(.+\) Per qualsiasi cosa all’interno di parentesi

Per abbinare una sottostringa tra parentesi escludendo le parentesi interne che è ansible utilizzare

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

modello. Guarda la demo regex .

In JavaScript, usalo come

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

Dettagli del modello

  • \( – a ( char
  • ([^()]*) – Cattura gruppo 1: una class carattere negata che corrisponde a 0 o più caratteri diversi da ( e )
  • \) – a ) char.

Per ottenere l’intera corrispondenza, prendi il valore di Gruppo 0, se hai bisogno del testo tra parentesi, prendi il valore di Gruppo 1:

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

Soluzione semplice

Nota : questa soluzione è usata per la stringa che ha solo una stringa “(” e “)” simile in questa domanda.

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

Demo online (jsfiddle)

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

Corrisponde al primo numero che inizia con $ e seguito da ‘)’. ‘)’ non farà parte della partita. Il codice avvisa con la prima partita.

 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]); } 

Questo codice avvisa con tutte le partite.

Riferimenti:

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

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