0

被问了很多次,但我无法让它工作......

我有这样的字符串:

"text!../tmp/widgets/tmp_widget_header.html"

并尝试像这样提取widget_header

var temps[i] = "text!../tmp/widgets/tmp_widget_header.html";
var thisString = temps[i].regexp(/.*tmp_$.*\.*/) )

但这不起作用。

有人可以告诉我我在这里做错了什么吗?

谢谢!

4

3 回答 3

3

这打印widget_header

var s = "text!../tmp/widgets/tmp_widget_header.html";
var matches = s.match(/tmp_(.*?)\.html/);
console.log(matches[1]);
于 2012-10-12T14:40:56.490 回答
1

在您的代码中:

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

于 2012-10-12T15:23:20.997 回答
1
var s = "text!../tmp/widgets/tmp_widget_header.html",
    re = /\/tmp_([^.]+)\./;

var match = re.exec(s);

if (match)
    alert(match[1]);

这将匹配:

  • 一个/字符
  • 那些角色tmp_
  • 一个或多个不是该角色的任何.角色。这些被捕获。
  • 一个.字符

如果找到匹配项,它将位于1结果数组的索引处。

于 2012-10-12T14:39:15.187 回答