J'essaie d'écrire une expression régulière qui retourne une chaîne entre parenthèses. Par exemple: je veux obtenir la chaîne qui réside entre les chaînes "(" et ")"
I expect five hundred dollars ($500).
retournerais
$500
Trouvé Expression rationnelle pour obtenir une chaîne entre deux chaînes en Javascript
Mais je suis nouveau avec regex. Je ne sais pas comment utiliser '(', ')' dans regexp
Vous devez créer un ensemble de parenthèses avec échappement (avec \
) (qui correspondent aux parenthèses) et un groupe de parenthèses normales créant votre groupe de capture:
var regExp = /\(([^)]+)\)/;
var matches = regExp.exec("I expect five hundred dollars ($500).");
//matches[1] contains the value between the parentheses
console.log(matches[1]);
Panne:
\(
: correspond à une parenthèse ouvrante(
: commencer la capture du groupe[^)]+
: correspond à un ou plusieurs caractères non )
)
: fin du groupe de capture\)
: faire correspondre les parenthèses fermantesVoici une explication visuelle sur RegExplained
Essayez la manipulation de chaîne:
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 (qui est un peu lent comparé à ce qui précède)
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));
}
Porté Réponse de Mr_Green à un style de programmation fonctionnel pour éviter l'utilisation de variables globales temporaires.
var matches = string2.split('[')
.filter(function(v){ return v.indexOf(']') > -1})
.map( function(value) {
return value.split(']')[0]
})
Solution simple
Notice: cette solution utilisée pour une chaîne ne comportant qu'un seul "(" et ")" comme chaîne dans cette question.
("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();
Pour les chiffres après le symbole monétaire: \(.+\s*\d+\s*\)
devrait fonctionner
Ou \(.+\)
pour tout ce qui est entre crochets
Pour faire correspondre une sous-chaîne entre parenthèses, à l’exception des parenthèses internes, vous pouvez utiliser
\(([^()]*)\)
modèle. Voir la démo regex .
En JavaScript, utilisez-le comme
var rx = /\(([^()]*)\)/g;
Détails du motif
\(
- un caractère (
([^()]*)
- Capture du groupe 1: une classe de caractères inversée correspondant à un ou plusieurs caractères autres que (
et )
\)
- un caractère )
.Pour obtenir la correspondance complète, saisissez la valeur du groupe 0, si vous avez besoin du texte entre parenthèses, saisissez la valeur du groupe 1:
var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
var rx = /\(([^()]*)\)/g;
for (var i=0;i<strs.length;i++) {
console.log(strs[i]);
// Grab Group 1 values:
var res=[], m;
while(m=rx.exec(strs[i])) {
res.Push(m[1]);
}
console.log("Group 1: ", res);
// Grab whole values
console.log("Whole matches: ", strs[i].match(rx));
}
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));
Correspondra au premier numéro commençant par $ et suivi de ')'. ')' ne fera pas partie du match. Le code alerte avec le premier match.
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]);
}
Ce code alerte avec toutes les correspondances.
Références:
rechercher "? = n" http://www.w3schools.com/jsref/jsref_obj_regexp.asp
rechercher "x (? = y)" https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp