2012-04-19 7 views
0

Est-il possible de créer une regex qui ne correspondra à une valeur que si elle n'est pas précédée d'une autre valeur? Par exemple, tester uniquement vrai si ? n'est pas précédé de .php. Comme les éléments suivants:correspondance regex basée sur la valeur précédente

/(?!\.php)\?/.test('mypage.php?call=here') == false; 
/(?!\.php)\?/.test('otherpage.asp?call=here') == true; 

J'ai essayé d'utiliser les lookaheads ?! et ?:, mais jusqu'à présent ne l'ai pas été en mesure de trouver une combinaison qui fonctionne.

+0

Vous n'avez pas besoin de look-ahead, mais de look-behind, ce qui n'est pas supporté par les expressions rationnelles javascript. – kirilloid

+0

Donc, vous voulez ceci: Faites correspondre s'il n'y a pas de '?'. S'il y a un '?', Chaque '?' Ne peut pas être précédé par '.php'? –

+0

@WordsLikeJared Ouais, à peu près. –

Répondre

2

Cela correspondra chaînes qui soit ne disposent pas d'un ? en eux, ou ont un ? qui n'est pas précédée par .php:

^(?!.*\.php\?) 

Et voici une version qui a également besoin d'un ? être en la chaîne:

^(?!.*\.php\?).*\? 
+0

belle. le second fonctionne parfaitement. –

Questions connexes