2010-12-04 5 views
4

Je besoin d'aide pour le déchiffrage RegexQu'est-ce que l'avenir de Regex fait?

(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1 

Cette venue de showdown.js

(\*\*|__)   match ** or __ 
(?=\S)    -> look ahead for *one* non-space character? what for? 
([^\r]*?\S[*_]*) -> zero or more non-carriage-returns, why newlines \n allowed?, one non-space, zero or more * or _ characters 
\1     ends with 1st capture: ** or __ 

Je ne sont pas principalement les 2e & 3e lignes

+3

Pourquoi ne pas demander à l'auteur? – Gumbo

+0

Voir aussi: http://stackoverflow.com/questions/2973436/regex-lookahead-lookbehind-and-atomic-groups – Cullub

Répondre

2

Je vais prendre un coup de poignard à la deuxième partie (Gardez à l'esprit, je suppose que basé sur la connaissance que c'est un parseur JS Markdown):

Le lookahead assertion (?=\S) est probablement là au cas où quelqu'un veut écrire deux astérisques ** ou deux underscores __ sans vouloir mettre en gras le texte qui vient après qui est séparé par un espace (voir ce que j'ai fait là?).

** This text will not be bold. ** 
**This text will be bold.** 

** Ce texte ne sera pas gras. **
Ce texte sera en gras.

+0

Je n'ai aucune idée de pourquoi la troisième partie exclut '\ r' mais pas' \ n', Pardon. – BoltClock