2017-08-30 4 views
0
SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; 
if(!s.match(/.*>\s*(\d+).*/)) {s.replace=(/.*>\s*(\d+).*/,'$1');} 
else {s.replace=/.*>\s*(\D+).*/,'$1';}") 
PROMPT {{!VAR1}} 

Je suis en train de vérifier si le code HTML extrait (correspondant à la première ou deuxième extrait) correspond à une chaîne de caractères numériques « 11111 » en dehors du les balises HTML et si elle le fait, le remplacer par le 1er groupe de capture de ladite correspondance ($ 1):iMacros FF Eval Si Else .match .replace groupe capture regex est ignorée

<td style="outline: 1px solid blue;"> 
 
       11111  <img src="/images/flaggen/de.png" name="" alt="" width="16" height="11" align="absmiddle">  SomeText     (MoreText)    </td>

Si elle ne correspond pas, remplacez-le par la chaîne de non caractères numériques "SomeText" utilisant à nouveau le premier groupe de capture ($ 1):

<td style="outline: 1px solid blue;"> 
 
         <img src="/images/flaggen/de.png" name="" alt="" width="16" height="11" align="absmiddle">  SomeText     (MoreText)    </td>

L'expression régulière dans les deux cas et ne remplace la chaîne, mais ne retourne littéralement

$1

, ou tout ce que j'essaie remplacer avec.

Aucun autre regex que j'ai essayé n'a fonctionné (renvoie seulement l'expression littérale regex), pas plus que $ &.

Comment puis-je référencer avec succès un groupe de capture dans cette expression?

Édition 1: L'utilisation de $ 1 sans guillemets retourne literraly $1, en utilisant des guillemets "$ 1" renvoie l'erreur iMacro MacroSyntaxError: wrong format of SET command, line 42 (Error code: -910). Échapper les guillemets \"$1\" renvoie à nouveau littéralement $1.

+0

@Toto sans les guillemets iMacros retourne '$ 1 ne définit pas, la ligne: 42 (Code d'erreur: -1001)' – yuu

+0

@Toto Je essayé cela avant, avec "" Je reçois MacroSyntaxError: format incorrect de la commande SET, ligne 42 (code d'erreur: -910), s'échapper avec \ $ 1 ne fonctionne pas, ni/1/ – yuu

+0

@Toto essayé cela aussi, le le retour est '$ 1'. Je vais modifier ma question pour inclure vos suggestions et leurs résultats. – yuu

Répondre

1

Si je vous comprends bien, essayez la commande EVAL suivante:

SET !VAR1 EVAL("var s='{{!EXTRACT}}'; if(s.match(/.*>\s*(\d+).*/)) {s = s.match(/.*>\s*(\d+).*/)[1];} else {s = s.match(/.*>\s*(\D+)\\(/)[1].trim();} s;") 
+0

Merci! C'est exactement ce dont j'avais besoin. – yuu

+0

Votre solution a résolu mon problème, mais je me demande si vous pourriez élaborer comment référencer le groupe de capture en utilisant .match/.replace. – yuu