Javascript / RegExp:Lookbehind断言导致"无效组"错误

时间:2011-05-12 05:31:15

标签: javascript jquery regex match lookbehind

我正在做一个简单的Lookbehind断言来获取URL的一部分(下面的例子),但是没有得到匹配,我得到以下错误:

Uncaught SyntaxError: Invalid regular expression: /(?<=\#\!\/)([^\/]+)/: Invalid group

这是我正在运行的脚本:

var url = window.location.toString();

url == http://my.domain.com/index.php/#!/write-stuff/something-else

// lookbehind to only match the segment after the hash-bang.

var regex = /(?<=\#\!\/)([^\/]+)/i; 
console.log('test this url: ', url, 'we found this match: ', url.match( regex ) );

结果应为write-stuff

有人可以解释为什么这个正则表达式组会导致此错误吗?看起来对我来说是一个有效的RegEx。

我知道如何获得我需要的细分市场的替代方案,所以这只是帮助我了解这里发生了什么而不是获得替代解决方案。

感谢阅读。

学家

3 个答案:

答案 0 :(得分:9)

我认为JavaScript不支持积极的外观。你将不得不做更多这样的事情:

<script>
var regex = /\#\!\/([^\/]+)/;
var url = "http://my.domain.com/index.php/#!/write-stuff/something-else";
var match = regex.exec(url);
alert(match[1]);
</script>

答案 1 :(得分:7)

Javascript不支持look-behind语法,因此(?<=)导致无效性错误。但是,您可以使用各种技术模仿它:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

答案 2 :(得分:0)

在全局(/ g)或未设置粘性标志的情况下,也可以使用String.prototype.match()代替RegExp.prototype.exec()

var regex = /\#\!\/([^\/]+)/;
var url = "http://my.domain.com/index.php/#!/write-stuff/something-else";
var match = url.match(regex); // ["#!/write-stuff", "write-stuff", index: 31, etc.,]
console.log(match[1]); // "write-stuff"