javascript中的lookbehind?

时间:2012-07-22 04:12:28

标签: javascript regex

我想使用正则表达式匹配并替换我的文件名和右括号之间的任何内容。

我写了一个正则表达式:

/(?<=imagecheck.php)[^)]*/

这适用于PHP,但不适用于Javascript。

......我怎么做JS?

示例:

 input string example 1: url(127.0.0.1/imagecheck.php)
 input string example 2: url(127.0.0.1/imagecheck.php?boost=9881732213826123918238)
 outcome string example: url(127.0.0.1/imagecheck.php?reload=oh_yes_plx&boost=123810982346023984723948723023423)

4 个答案:

答案 0 :(得分:2)

Javascript不支持后视。您可以使用捕获组来代替"imagecheck.php"之后的文本:

.match(/imagecheck.php([^)]*)/)

结果将在返回数组的索引1中(如果匹配)。

这是删除"imagecheck.php"

之后的内容的示例
.replace(/(imagecheck.php)[^)]*/, "$1")

答案 1 :(得分:2)

在javascript中没有后视,您可以替换文件名和结束语之间的所有内容,如下所示:

str = str.replace(/imagecheck.php\([^)]*\)/, "imagecheck.php(whatever)");

或者,您可以使用捕获组和编号引用来避免重复初始模式:

str = str.replace(/(imagecheck.php)\([^)]*\)/, "$1(whatever)");

答案 2 :(得分:1)

XRegExp不直接支持lookbehind。为此,您需要使用之前由@arxanas链接的插件脚本:http://blog.stevenlevithan.com/archives/javascript-regex-lookbehind。此外,XRegExp在其模式字符串中不使用正斜杠分隔符。

答案 3 :(得分:0)

虽然Javascript本身不支持正则表达式中的lookbehind,但我们可以拉入XRegExp,这是一个功能更强大的Javascript正则表达式引擎。

var pattern = XRegExp('/(?<=imagecheck.php)[^)]*/', 'g'); // g is the global flag
XRegExp.replace(input, pattern, replacement);