首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript/RegExp: Lookbehind断言导致"Invalid group“错误

Javascript/RegExp: Lookbehind断言导致"Invalid group“错误
EN

Stack Overflow用户
提问于 2011-05-12 13:31:15
回答 3查看 5.6K关注 0票数 9

我正在执行一个简单的Lookbehind断言来获取URL的一段(如下例所示),但是没有得到匹配结果,而是得到了以下错误:

代码语言:javascript
复制
Uncaught SyntaxError: Invalid regular expression: /(?<=\#\!\/)([^\/]+)/: Invalid group

下面是我正在运行的脚本:

代码语言:javascript
复制
var url = window.location.toString();

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

代码语言:javascript
复制
// 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。

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

感谢您的阅读。

J.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-12 13:50:24

我相信JavaScript不支持正向回溯。你将不得不做更多像这样的事情:

代码语言: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>
票数 11
EN

Stack Overflow用户

发布于 2011-05-12 13:51:33

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

票数 7
EN

Stack Overflow用户

发布于 2020-07-15 15:12:13

此外,在全局(/g)或粘滞标志(/s)未设置的情况下,您可以使用String.prototype.match()而不是RegExp.prototype.exec()

代码语言:javascript
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5973669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档