如何在Javascript中正则化两个标记之间的字符串?

如何在Javascript中正则化两个标记之间的字符串?,javascript,regex,Javascript,Regex,问了很多次,但我都没法用 我有这样的字符串: "text!../tmp/widgets/tmp_widget_header.html" 我正试图这样提取widget\u标题: var temps[i] = "text!../tmp/widgets/tmp_widget_header.html"; var thisString = temps[i].regexp(/.*tmp_$.*\.*/) ) var s = "text!../tmp/widgets/tmp_widget_header.h

问了很多次,但我都没法用

我有这样的字符串:

"text!../tmp/widgets/tmp_widget_header.html"
我正试图这样提取
widget\u标题

var temps[i] = "text!../tmp/widgets/tmp_widget_header.html";
var thisString = temps[i].regexp(/.*tmp_$.*\.*/) )
var s = "text!../tmp/widgets/tmp_widget_header.html";
var matches = s.match(/tmp_(.*?)\.html/);
console.log(matches[1]);
但这是行不通的

有人能告诉我我做错了什么吗

谢谢

var s = "text!../tmp/widgets/tmp_widget_header.html",
    re = /\/tmp_([^.]+)\./;

var match = re.exec(s);

if (match)
    alert(match[1]);
这将匹配:

  • /
    字符
  • 字符
    tmp\uu
  • 字符的一个或多个字符。这些都被抓获了
  • 字符
如果找到匹配项,它将位于结果数组的索引
1

这将匹配:

  • /
    字符
  • 字符
    tmp\uu
  • 字符的一个或多个字符。这些都被抓获了
  • 字符

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

这将打印
widget\u头

var temps[i] = "text!../tmp/widgets/tmp_widget_header.html";
var thisString = temps[i].regexp(/.*tmp_$.*\.*/) )
var s = "text!../tmp/widgets/tmp_widget_header.html";
var matches = s.match(/tmp_(.*?)\.html/);
console.log(matches[1]);

这将打印小部件标题:

var temps[i] = "text!../tmp/widgets/tmp_widget_header.html";
var thisString = temps[i].regexp(/.*tmp_$.*\.*/) )
var s = "text!../tmp/widgets/tmp_widget_header.html";
var matches = s.match(/tmp_(.*?)\.html/);
console.log(matches[1]);
在代码中:

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

匹配任何字符串,该字符串以任意数量的字符开头,后跟“tmp_”,后跟输入的结尾,后跟任意数量的句点

另外,在使用regex()函数时,需要传递字符串,使用字符串表示法,如
var re=new RegExp(“ab+c”)
var re=new RegExp('ab+c')
不使用斜杠的正则表达式表示法。您还有一个额外的或缺少的括号,并且没有实际捕获的字符

您要做的是:

查找一个字符串,该字符串前面是输入的开头,后面是一个或多个字符,后面是“tmp_”;后面是一个句点,后面是一个或多个字符,后面是包含一个或多个字符的输入的结尾;t。捕获该字符串

因此:

这个正则表达式表示:

^    : 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\U ebeb.45t4t$^g”
out==“ebeb”
。因此,根据具体用途,您可能希望用括号内的“[]”字符列表替换用于表示任何字符(换行符除外)的任何“.”,因为这可能会过滤掉不需要的结果。你的理解可能会有所不同

有关更多信息,请访问代码中的:

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

匹配任何字符串,该字符串以任意数量的字符开头,后跟“tmp_”,后跟输入的结尾,后跟任意数量的句点

另外,在使用regex()函数时,需要传递字符串,使用字符串表示法,如
var re=new RegExp(“ab+c”)
var re=new RegExp('ab+c')
不使用斜杠的正则表达式表示法。您还有一个额外的或缺少的括号,并且没有实际捕获的字符

您要做的是:

查找一个字符串,该字符串前面是输入的开头,后面是一个或多个字符,后面是“tmp_”;后面是一个句点,后面是一个或多个字符,后面是包含一个或多个字符的输入的结尾;t。捕获该字符串

因此:

这个正则表达式表示:

^    : 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\U ebeb.45t4t$^g”
out==“ebeb”
。因此,根据具体用途,您可能希望用括号内的“[]”字符列表替换用于表示任何字符(换行符除外)的任何“.”,因为这可能会过滤掉不需要的结果。你的理解可能会有所不同


有关更多信息,请访问:

您希望
$
在正则表达式中执行什么操作?我想从这里开始提取字符串。您希望
$
在正则表达式中执行什么操作?我想从这里开始提取字符串。差不多。如果我有
text/tmp/page/tmp\u page\u footer.html
然后我返回“[”/tmp\u page\u footer.,“page\u footer”]。知道为什么吗?@frequent:这不是你想要的结果吗?目标文本
“page\u footer”
位于结果数组的索引
[1]
。@频繁:在尝试访问索引之前,请确保测试是否存在匹配项。如果没有匹配项,则得到的是
null
而不是空数组,因此尝试访问
null
上的索引将抛出一个错误。如果我有
text/tmp/page/tmp\u page\u footer.html
然后我返回“[”/tmp\u page\u footer.,“page\u footer”]。知道为什么吗?@frequent:这不是你想要的结果吗?目标文本
“page\u footer”
位于结果数组的索引
[1]
。@频繁:在尝试访问索引之前,请确保测试是否存在匹配项。如果没有匹配项,您将得到
null
而不是空数组,因此尝试访问
null
上的索引将抛出错误。另外,谢谢。我同意另一个答案,因为它更快。也谢谢。我同意另一个答案,因为它更快。