亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在JavaScript正則表達式中命名捕獲組?

在JavaScript正則表達式中命名捕獲組?

波斯汪 2019-08-19 10:54:56
在JavaScript正則表達式中命名捕獲組?據我所知,在JavaScript中沒有名為捕獲組的東西。獲得類似功能的另一種方法是什么?
查看完整描述

3 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

ECMAScript 2018將命名捕獲組引入JavaScript正則表達式。

如果您需要支持舊瀏覽器,您可以使用正常(編號)捕獲組執行所有操作,您可以使用命名捕獲組執行操作,您只需要跟蹤數字 - 如果您的捕獲組的順序可能很麻煩正則表達式的變化。

我能想到的命名捕獲組只有兩個“結構”優勢:

  1. 在一些正則表達式中(.NET和JGSoft,據我所知),您可以在正則表達式中為不同的組使用相同的名稱(有關這一事項的示例,請參閱此處)。但是大多數正則表達式都不支持這種功能。

  2. 如果您需要在數字包圍的情況下引用編號的捕獲組,則可能會出現問題。假設您想要為數字添加零,因此要替換(\d)$10。在JavaScript中,這將起作用(只要你的正則表達式中有少于10個捕獲組),但Perl會認為你正在尋找反向引號10而不是數字1,然后是a 0。在Perl中,您可以${1}0在這種情況下使用。

除此之外,命名捕獲組只是“語法糖”。僅在您真正需要時才使用捕獲組,并(?:...)在所有其他情況下使用非捕獲組。

使用JavaScript的更大問題(在我看來)是它不支持詳細的正則表達式,這將使可讀,復雜的正則表達式的創建更容易。

Steve Levithan的XRegExp庫解決了這些問題。


查看完整回答
反對 回復 2019-08-19
?
MM們

TA貢獻1886條經驗 獲得超2個贊

您可以使用XRegExp,這是一種增強的,可擴展的,跨瀏覽器的正則表達式實現,包括對其他語法,標志和方法的支持:

  • 添加新的正則表達式和替換文本語法,包括對命名捕獲的全面支持。

  • 添加兩個新的正則表達式標志:s,使點匹配所有字符(也稱為dotall或單行模式),以及x自由間距和注釋(也稱為擴展模式)。

  • 提供一系列功能和方法,使復雜的正則表達式處理變得輕而易舉。

  • 自動修復正則表達式行為和語法中最常遇到的跨瀏覽器不一致性。

  • 允許您輕松創建和使用為XRegExp的正則表達式語言添加新語法和標志的插件。


查看完整回答
反對 回復 2019-08-19
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

另一種可能的解決方案:創建一個包含組名和索引的對象。

var regex = new RegExp("(.*) (.*)");var regexGroups = { FirstName: 1, LastName: 2 };

然后,使用對象鍵來引用組:

var m = regex.exec("John Smith");var f = m[regexGroups.FirstName];

這使用正則表達式的結果提高了代碼的可讀性/質量,但不提高了正則表達式本身的可讀性。


查看完整回答
反對 回復 2019-08-19
  • 3 回答
  • 0 關注
  • 1280 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號