繁体   English   中英

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

[英]how to regex a string between two tokens in Javascript?

问了很多遍,但我无法正常工作...

我有这样的字符串:

"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_$.*\.*/) )

但这不起作用。

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

谢谢!

这将打印widget_header

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_
  • 不是的任何一个或多个字符. 字符。 这些被捕获。
  • 一个. 字符

如果找到匹配项,它将位于结果数组的索引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"out == 'ebeb' 因此,根据具体用途,您可能希望用括号“ []”字符列表替换用于表示任何字符(换行符除外)的任何“。”,因为这可能会过滤掉不需要的结果。 您的里程可能会有所不同。

有关更多信息,请访问: https : //developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM