What does the look ahead in Regex do?

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

Answers


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.


Need Your Help

CAS: credentials don't get validated if the login page is idle

java cas jasig

I have a situation in which, if the login page stays idle for sometime then the entered credentials don't get validated and nothing happens. Instead same login page is displayed clearing the entered

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.