如何在Javascript中的两个令牌之间正则表达字符串?

时间:2012-10-12 14:34:30

标签: javascript regex

多次被问到,但我无法让它发挥作用......

我有像:

这样的字符串
"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_$.*\.*/) )

但这不起作用。

有人能告诉我这里的错误吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

这会打印widget_header

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

答案 1 :(得分:1)

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

var match = re.exec(s);

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

这将匹配:

  • 一个/字符
  • 字符tmp_
  • 一个或多个不是.字符的字符。这些被捕获。
  • 一个.字符

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

答案 2 :(得分: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