在您的代码中:
var temps[i] = "text!../tmp/widgets/tmp_widget_header.html";
var thisString = temps[i].regexp(/.*tmp_$.*\.*/) )
你是说:
“匹配以任意数量的任意字符开头的任何字符串,后跟“tmp_”,然后是输入的结尾,后跟任意数量的句点。”
.* : Any number of any character (except newline)
tmp_ : Literally "tmp_"
$ : End of input/newline - this will never be true in this position
\. : " . ", a period
\.* : Any number of periods
另外,当使用 regex() 函数时,您需要传递一个字符串,使用字符串表示法,例如var re = new RegExp("ab+c")
或var re = new RegExp('ab+c')
不使用斜线的正则表达式表示法。您还有一个额外的或缺少的括号,并且实际上没有捕获任何字符。
你想做的是:
"查找一个以输入开头,后跟一个或多个任意字符,后跟“tmp_”的字符串;后跟单个句点,后跟一个或多个任意字符,然后是输入结尾;t包含一个或多个任意字符。捕获该字符串。”
所以:
var string = "text!../tmp/widgets/tmp_widget_header.html";
var re = /^.+tmp_(.+)\..+$/; //I use the simpler slash notation
var out = re.exec(string); //execute the regex
console.log(out[1]); //Note that out is an array, the first (here only) catpture sting is at index 1
这个正则表达式/^.+tmp_(.+)\..+$/
意味着:
^ : Match beginning of input/line
.+ : One or more of any character (except newline), "+" is one or more
tmp_ : Constant "tmp_"
\. : A single period
.+ : As above
$ : End of input/line
您也可以使用它,RegEx('^.+tmp_(.+)\..+$');
因为当我们使用时RegEx();
我们没有斜线标记,而是使用引号(单引号或双引号都可以),将其作为字符串传递。
现在这也将匹配var string = "Q%$#^%$^%$^%$^43etmp_ebeb.45t4t#$^g"
and out == 'ebeb'
。因此,根据具体用途,您可能希望将用于表示任何字符(换行符除外)的任何“.”替换为带括号的“[]”字符列表,因为这可能会过滤掉不需要的结果。你的里程可能会有所不同。
欲了解更多信息,请访问:https ://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions