RegExp Positive Lookbehind realization
by Ivan Gerasimenko
HTML
<h4>Positive Lookbehind realization</h4>
<h4>TODO: Negative Lookbehind realization</h4>
JavaScript
// regexp like: "patt1(patt2)"
// where patt1 - lookbehind pattern and patt2 - patt to look for
function LookBehind(regexp) {
var patt = new RegExp(regexp);
return {
exec: function(str) {
var pattExec = patt.exec(str);
return (pattExec !== null && pattExec.length > 1) ?
pattExec[1] : null;
},
regexp: function() {
return "/" + regexp + "/";
}
}
}
var str1 = "20.12.2014";
var str2 = "20.12.2014 year";
var str3 = "20.12.201";
var str4 = "20.g2.2014";
var log = function(message) { console.log(message); };
var regexYear = LookBehind("\\d{2}\\.\\d{2}\\.(\\d{4})");
console.clear();
log("RegExp: " + regexYear.regexp());
log(padLeft(str1, 16) + " :: " + regexYear.exec(str1));
log(padLeft(str2, 16) + " :: " + regexYear.exec(str2));
log(padLeft(str3, 16) + " :: " + regexYear.exec(str3));
log(padLeft(str4, 16) + " :: " + regexYear.exec(str4));
var name1 = "Jan Samual Koen";
var name2 = "Paul Simpton Huwet";
var name3 = "Mark Tim Jones";
var name4 = "Lin Kan Jefferson";
var regexMiddleName =
LookBehind("[A-Z][a-z]+\\s([A-Z][a-z]+)\\s[A-Z][a-z]+");
log();
log("RegExp: " + regexYear.regexp());
log(padLeft(name1, 16) + " :: " + regexMiddleName.exec(name1));
log(padLeft(name2, 16) + " :: " + regexMiddleName.exec(name2));
log(padLeft(name3, 16) + " :: " + regexMiddleName.exec(name3));
log(padLeft(name4, 16) + " :: " + regexMiddleName.exec(name4));
//======== helpers =========
function padLeft(str, len, char) {
var substitutionChar;
if(typeof char === 'undefined')
substitutionChar = ' ';
else
substitutionChar = char;
var lengthOfPad = len + 1 - str.length;
lengthOfPad = lengthOfPad > 0 ? lengthOfPad : 0;
return str + Array(lengthOfPad).join(substitutionChar);
}