(?:...) encore correspond, il n'a tout simplement pas de créer un nouveau groupe à des fins de \1/$1/.groups(1)/etc.
Afin de réaliser ce que je veux, je dois faire un = x.match(/(ab)(?:cd)(ef)/); x = a[1] + a[2]; - il correct? Vous pourriez le faire, oui, mais la aucun-la capture d'un groupe n'est pas nécessaire pour que l'expression particulière. /(ab)cd(ef)/ serait de faire le même travail. x.replace(/(ab)cd(ef)/, "$1$2"); serait-il le faire encore mieux, mais j'imagine que votre véritable expression est un peu plus compliqué que votre exemple ici :-).
Votre compréhension est erronée. Le groupe sera toujours une partie de la capture, mais il ne comptera pas comme une sous-expression de capture. La suivante serait de retourner un tableau de deux matches:
x ="abcdefg"
x = x.match(/ab(cd)ef/)
Index de tableau 0 serait "abcdef" (correspondance exacte) et l'index de tableau 1 serait "cd", la sous-expression de capture. L'ajout de la ?: raconte la regex ne pas se soucier de la capture de la sous-expression, la correspondance est encore pleinement pris en compte.
À partir de vos autres commentaires, il y a un certain nombre de façons que vous pourriez faire ce que vous essayez de faire. Par exemple:
En plus des autres réponses, si vous avez vraiment besoin de faire correspondre seulement à l'extérieur des expressions dans les regex, vous devez faire quelque chose comme ceci:
x ="abcdefg"
xarr = x.match(/(ab)(?:cd)(ef)/)
x = xarr[1]+ xarr[2]
Mais vraiment regex n'est pas destinée pour ce cas.
Merci et d'accord avec vous, d'ailleurs, je pense que vous vouliez dire + au lieu de & Ah, oui, mon mauvais. Trop VB.Net.
(?:...)
encore correspond, il n'a tout simplement pas de créer un nouveau groupe à des fins de\1
/$1
/.groups(1)
/etc.Vous pourriez le faire, oui, mais la aucun-la capture d'un groupe n'est pas nécessaire pour que l'expression particulière.
/(ab)cd(ef)/
serait de faire le même travail.x.replace(/(ab)cd(ef)/, "$1$2");
serait-il le faire encore mieux, mais j'imagine que votre véritable expression est un peu plus compliqué que votre exemple ici :-).OriginalL'auteur Ignacio Vazquez-Abrams
Votre compréhension est erronée. Le groupe sera toujours une partie de la capture, mais il ne comptera pas comme une sous-expression de capture. La suivante serait de retourner un tableau de deux matches:
Index de tableau 0 serait "abcdef" (correspondance exacte) et l'index de tableau 1 serait "cd", la sous-expression de capture. L'ajout de la
?:
raconte la regex ne pas se soucier de la capture de la sous-expression, la correspondance est encore pleinement pris en compte.À partir de vos autres commentaires, il y a un certain nombre de façons que vous pourriez faire ce que vous essayez de faire. Par exemple:
OriginalL'auteur Andy E
En plus des autres réponses, si vous avez vraiment besoin de faire correspondre seulement à l'extérieur des expressions dans les regex, vous devez faire quelque chose comme ceci:
Mais vraiment regex n'est pas destinée pour ce cas.
Ah, oui, mon mauvais. Trop VB.Net.
OriginalL'auteur tloflin