2010-05-07 3 views
1

Je me demande si les assertions lookbehind de longueur variable sont supportées dans le moteur RegExp de JavaScript?Supprimer les espaces blancs principaux en utilisant lookbehind de longueur variable dans RegExp

Par exemple, je suis en train de faire correspondre la chaîne « longueur variable » dans la chaîne « [beaucoup d'espaces blancs et/ou onglets] longueur variable lookbehind », et j'ai quelque chose comme ça mais il ne va pas bien dans divers testeurs RegExp:

^(?<=[ \t]+).+(?= lookbehind) 

Si c'est un motif illégal, ce serait une bonne solution pour elle? Merci!

Répondre

2

Javascript n'a aucun look-behind du tout. Steven Levithan a written up a few says to sort of mimic it, ce qui peut être utile.

Je ne comprends pas tout à fait votre exemple, car il semble que cela correspondrait au projet de loi:

/^\s+(.+)lookbehind$/ 

... qui correspond à un ou plusieurs caractères blancs suivis par un ou plusieurs caractères quelconques (dans un groupe de capture) suivi du mot "lookbehind". Utilisé comme ceci:

var str = "  variable length lookbehind"; 
var match = /^\s+(.+)lookbehind$/.exec(str); 

cède ce tableau:

match[0]: |  variable length lookbehind| 
match[1]: |variable length| 

En Javascript, la première entrée dans le tableau est la chaîne entière correspondance, et les entrées suivantes sont les groupes de capture.

Mais vous avez clairement une bonne compréhension des expressions rationnelles, donc je ne suis pas sûr que ce que vous cherchez ...

Quelque chose à être au courant dans ce domaine général est qu'un certain nombre d'implémentations de Les moteurs RegExp en Javascript ne sont pas tout à fait gérer correctement \s (ils manquent de correspondre à certains caractères d'espace au-dessus de la plage ASCII); voir le test S_REGEXP_WHITESPACE_CHARACTER_CLASS_BUGGY here.

+0

Salut, en fait, je ne comprends pas du tout la regex, comme le montre votre exemple, ce qui est beaucoup plus intuitif que ce que j'ai imaginé. bonne information sur le tableau, il ne m'a pas traversé l'esprit haha. s cas match [1] serait ce que je cherche. – Dan7

+0

@Shizhidi: Ah, bien, heureux que cela a aidé! –

2

Voir Faster JavaScript Trim

Il montre de nombreuses façons une garniture peut être fait (dont aucun besoin d'un regard-derrière) et compare également la vitesse des différents approches. Si l'objectif final inclut le décapage des espaces blancs, n'ayez pas peur de le décomposer en plusieurs opérations.

Certaines personnes, confrontées à un problème, pensent "Je sais, j'utiliserai des expressions régulières."Maintenant, ils ont deux problèmes - Jamie Zawinski

+0

+1 Je déteste l'admettre mais c'est vrai. Bien que ce que je voulais faire ne soit pas entièrement une opération de coupe, j'aurais pu utiliser le regroupement. – Dan7

2

Je ne sais pas si cela vous aidera à RegExp mais si vous voulez supprimer les espaces blancs, vous pouvez utiliser une fonction de garniture

function trimAll(sString) { 
    while (sString.substring(0, 1) == ' ') { 
    sString = sString.substring(1, sString.length); 
    } 
    while (sString.substring(sString.length - 1, sString.length) == ' ') { 
    sString = sString.substring(0, sString.length - 1); 
    } 
    return sString; 
} 

Sinon, si vous voulez vérifier l'existence de la chaîne que vous pouvez utiliser indexOf IndexOf on StackOverflow.com

Questions connexes