簡體   English   中英

Javascript/RegExp:Lookbehind Assertion 導致“無效組”錯誤

[英]Javascript/RegExp: Lookbehind Assertion is causing a "Invalid group" error

我正在做一個簡單的 Lookbehind Assertion 來獲取 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。

我知道如何獲得我需要的細分市場的替代方案,所以這實際上只是幫助我了解這里發生的事情,而不是獲得替代解決方案。

謝謝閱讀。

J。

我相信 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>

Javascript 不支持后視語法,因此(?<=)是導致無效錯誤的原因。 但是,您可以使用各種技術來模仿它: http : //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

你也可以使用String.prototype.match()而不是RegExp.prototype.exec()在 global(/g) 或sticky flags(/s) 沒有設置的情況下。

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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM