1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
define("dojo/data/util/filter", ["../../_base/lang"], function(lang){
// module:
// dojo/data/util/filter
// summary:
// TODOC
var filter = {};
lang.setObject("dojo.data.util.filter", filter);
filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){
// summary:
// Helper function to convert a simple pattern to a regular expression for matching.
// description:
// Returns a regular expression object that conforms to the defined conversion rules.
// For example:
//
// - ca* -> /^ca.*$/
// - *ca* -> /^.*ca.*$/
// - *c\*a* -> /^.*c\*a.*$/
// - *c\*a?* -> /^.*c\*a..*$/
//
// and so on.
// pattern: string
// A simple matching pattern to convert that follows basic rules:
//
// - * Means match anything, so ca* means match anything starting with ca
// - ? Means match single character. So, b?b will match to bob and bab, and so on.
// - \ is an escape character. So for example, \* means do not treat * as a match, but literal character *.
//
// To use a \ as a character in the string, it must be escaped. So in the pattern it should be
// represented by \\ to be treated as an ordinary \ character instead of an escape.
// ignoreCase:
// An optional flag to indicate if the pattern matching should be treated as case-sensitive or not when comparing
// By default, it is assumed case sensitive.
var rxp = "^";
var c = null;
for(var i = 0; i < pattern.length; i++){
c = pattern.charAt(i);
switch(c){
case '\\':
rxp += c;
i++;
rxp += pattern.charAt(i);
break;
case '*':
rxp += ".*"; break;
case '?':
rxp += "."; break;
case '$':
case '^':
case '/':
case '+':
case '.':
case '|':
case '(':
case ')':
case '{':
case '}':
case '[':
case ']':
rxp += "\\"; //fallthrough
default:
rxp += c;
}
}
rxp += "$";
if(ignoreCase){
return new RegExp(rxp,"mi"); //RegExp
}else{
return new RegExp(rxp,"m"); //RegExp
}
};
return filter;
});
|