71 lines
2 KiB
JavaScript
71 lines
2 KiB
JavaScript
|
define("dojo/regexp", ["./_base/kernel", "./_base/lang"], function(dojo, lang){
|
||
|
|
||
|
// module:
|
||
|
// dojo/regexp
|
||
|
|
||
|
var regexp = {
|
||
|
// summary:
|
||
|
// Regular expressions and Builder resources
|
||
|
};
|
||
|
lang.setObject("dojo.regexp", regexp);
|
||
|
|
||
|
regexp.escapeString = function(/*String*/str, /*String?*/except){
|
||
|
// summary:
|
||
|
// Adds escape sequences for special characters in regular expressions
|
||
|
// except:
|
||
|
// a String with special characters to be left unescaped
|
||
|
|
||
|
return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, function(ch){
|
||
|
if(except && except.indexOf(ch) != -1){
|
||
|
return ch;
|
||
|
}
|
||
|
return "\\" + ch;
|
||
|
}); // String
|
||
|
};
|
||
|
|
||
|
regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
|
||
|
// summary:
|
||
|
// Builds a regular expression that groups subexpressions
|
||
|
// description:
|
||
|
// A utility function used by some of the RE generators. The
|
||
|
// subexpressions are constructed by the function, re, in the second
|
||
|
// parameter. re builds one subexpression for each elem in the array
|
||
|
// a, in the first parameter. Returns a string for a regular
|
||
|
// expression that groups all the subexpressions.
|
||
|
// arr:
|
||
|
// A single value or an array of values.
|
||
|
// re:
|
||
|
// A function. Takes one parameter and converts it to a regular
|
||
|
// expression.
|
||
|
// nonCapture:
|
||
|
// If true, uses non-capturing match, otherwise matches are retained
|
||
|
// by regular expression. Defaults to false
|
||
|
|
||
|
// case 1: a is a single value.
|
||
|
if(!(arr instanceof Array)){
|
||
|
return re(arr); // String
|
||
|
}
|
||
|
|
||
|
// case 2: a is an array
|
||
|
var b = [];
|
||
|
for(var i = 0; i < arr.length; i++){
|
||
|
// convert each elem to a RE
|
||
|
b.push(re(arr[i]));
|
||
|
}
|
||
|
|
||
|
// join the REs as alternatives in a RE group.
|
||
|
return regexp.group(b.join("|"), nonCapture); // String
|
||
|
};
|
||
|
|
||
|
regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
|
||
|
// summary:
|
||
|
// adds group match to expression
|
||
|
// nonCapture:
|
||
|
// If true, uses non-capturing match, otherwise matches are retained
|
||
|
// by regular expression.
|
||
|
return "(" + (nonCapture ? "?:":"") + expression + ")"; // String
|
||
|
};
|
||
|
|
||
|
return regexp;
|
||
|
});
|