0

尝试查找以不区分大小写的变量开头的文件夹

var varname = ("BUI")
var stringMatch = "\\" + varname + "\\b";
if (FolderItems[i].name.match(stringMatch)) {
//do script
}

我发现 Regex 很混乱,我知道varname = \\\BUI\\\b,但是我需要什么才能找到以该变量开头的文件夹?我希望这个找到一个名为'Building_v02'

4

4 回答 4

0
 if (FolderItems[i].name.match("^[BUI]")) {
  //do script
 }

^ 表示字符串应以 'BUI' 开头

于 2013-01-19T08:43:31.340 回答
0

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++) {
    // ...
}
于 2013-01-19T08:50:11.030 回答
0

您可以在浏览器控制台中轻松尝试。我会说你最好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

于 2013-01-19T08:56:32.667 回答
0
var varname = "BUI";
var stringMatch = '^' + varname + '\\b';

if ( FolderItems[i].name.match( RegExp( stringMatch, 'i' ) ) {
    //do script
}

您可以match像之前那样传递一个字符串,但如果您传递一个 RegExp 对象,您可以提供第二个参数i,这表明您想要一个不区分大小写的匹配。

正则表达式 MDN

于 2013-01-19T09:52:32.233 回答