JavaScript’s regular expressions: more fun with XRegExp

Reminder: As soon as your JavaScript regular expressions become more complicated, you should probably use Steven Levithan’s XRegExp library.
The cool thing about XRegExp is that it internally compiles its extended regular expressions to normal regular expressions, meaning that they are fast. Let’s look at some of XRegExp’s highlights, quoted from the XRegExp website.



Highlights: insignificant whitespace, inline comments, named groups




var date = XRegExp('(?<year> [0-9]{4} ) -? # year \n' +
'(?<month> [0-9]{2} ) -? # month \n' +
'(?<day> [0-9]{2} ) # day ', 'x');


The above example demonstrates three features: First, the x flag makes whitespace insignificant in regular expressions. You can spread out things as much as you like and the regular expression becomes more readable. Regular expressions can be awfully crowded; this helps. Second, with the x flag, you also get inline comments via #. Third, you can name groups (above: year, month, date). You can then use the names in match results:


console.log(XRegExp.exec('2012-06-10', date).year); // 2012


And in replacement strings:


console.log(XRegExp.replace(
'2012-06-10', date,
'${month}/${day}/${year}')); // 06/10/2012



Highlight: subpatterns



XRegExp.build() is a plugin for assembling a regular expression from subpatterns. For example:


var time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', {
hours: XRegExp.build('{{h12}} : | {{h24}}', {
h12: /1[0-2]|0?[1-9]/,
h24: /2[0-3]|[01][0-9]/
}, 'x'),
minutes: /^[0-5][0-9]$/
});

console.log(time.test('10:59')); // true
console.log(XRegExp.exec('10:59', time).minutes); // 59


ECMAScript 6 and XRegExp



ECMAScript 6 will have template strings which will make XRegExp even more pleasant to use.

Comments

Popular posts from this blog

Steve Lopez and the Importance of Newspapers

A Treasure Hunt Without The Treasure

Drop a ping-pong ball in the clown’s mouth