尝试查找以不区分大小写的变量开头的文件夹
var varname = ("BUI")
var stringMatch = "\\" + varname + "\\b";
if (FolderItems[i].name.match(stringMatch)) {
//do script
}
我发现 Regex 很混乱,我知道varname = \\\BUI\\\b
,但是我需要什么才能找到以该变量开头的文件夹?我希望这个找到一个名为'Building_v02'
尝试查找以不区分大小写的变量开头的文件夹
var varname = ("BUI")
var stringMatch = "\\" + varname + "\\b";
if (FolderItems[i].name.match(stringMatch)) {
//do script
}
我发现 Regex 很混乱,我知道varname = \\\BUI\\\b
,但是我需要什么才能找到以该变量开头的文件夹?我希望这个找到一个名为'Building_v02'
if (FolderItems[i].name.match("^[BUI]")) {
//do script
}
^ 表示字符串应以 'BUI' 开头
在JavaScript 正则表达式语法中,^
是字符串开头的锚点。不区分大小写用i
标志单独表示:
var varname = "BUI";
var re = new RegExp("^" + varname, "i");
if (re.test(FolderItems[i].name)) {
// do script
}
但是,如果字符串可能包含任何不需要的正则表达式元字符,则应该转义该字符串。
另请注意,您可能不必使用正则表达式:
var varname = "BUI".toLowerCase();
if (FolderItems[i].name.toLowerCase().indexOf(varname) === 0) {
// do script
}
要实际迭代项目数组:
for (var i = 0; i < FolderItems.length; i++) {
// ...
}
您可以在浏览器控制台中轻松尝试。我会说你最好substring
在匹配字符串的开头时使用。
var matchFor = "BUI";
var folders = ["Building_v02","Building_v03", "unmatched"];
folders.filter(function(folder){
return folder.substring(0,3).toLowerCase()===(matchFor.toLowerCase());
}).forEach(function(value){
console.log(value)
});
这在旧版浏览器中不起作用,除非您添加 filter 和 forEach,例如使用underscore.js
var varname = "BUI";
var stringMatch = '^' + varname + '\\b';
if ( FolderItems[i].name.match( RegExp( stringMatch, 'i' ) ) {
//do script
}
您可以match
像之前那样传递一个字符串,但如果您传递一个 RegExp 对象,您可以提供第二个参数i
,这表明您想要一个不区分大小写的匹配。