4

I need help deciphering Regex

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

This came from 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 __

I mainly don't get the 2nd & 3rd lines

JabberwockyDecompiler
  • 3,068
  • 2
  • 34
  • 51
Jiew Meng
  • 74,635
  • 166
  • 442
  • 756

1 Answers1

2

I'll take a stab at the second part (keep in mind I guess based on the knowledge that this is a JS Markdown parser):

The lookahead assertion (?=\S) is probably there in case someone wants to write two asterisks ** or two underscores __ without wanting to bold the text that comes after it that is separated by a space (see what I did there?).

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

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

BoltClock
  • 630,065
  • 150
  • 1,295
  • 1,284