2012-08-07 49 views
0

我有類似於'foo = "bar"'的字符串。現在,當我測試這些字符串是否通過了某個正則表達式時,我正在測試'bar'周圍的引號,["|']?,使得該區域中的完整正則表達式沿着["|']?(\w+)["|']?行(我爲了可讀性剝離不相關的表達式部分)。只有打開報價時才能結束報價

這意味着幾件事情:

  • 字周圍的報價可以是雙引號,單引號,或不存在。
  • 不管它們是什麼,它們都不是「連接」的。如果左側使用雙引號,右側沒有引號,則仍會通過,等等。

我的目標是根據第一個匹配第二個報價。我非常想用RegEx完全實現這一點,儘管我明白我正在接近它可以做到的極限(就JavaScript實現而言)。我非常熟悉lookaheads/behinds,但據我所知,這些只有在引用引用時纔有意義。我希望我不正確地理解他們。

P.S .:我只是擔心現代瀏覽器,所以IE的支持不是問題。

P.P.S:我提到我想用RegEx來做到這一點。請節省您的努力,不要給出替代方案。 「你不能這樣做」就足夠了。

回答

1

你可以寫:

/(["'])\w+\1/ 

\1將只匹配的字符串是相同的第二capture-group(["']))拍攝的是什麼。

請注意,我從character class["']中刪除了管道字符|,因爲它看起來是一個錯誤:管道字符在字符類中沒有任何特殊含義。 ["|']只有在您想要匹配例如|bar|

+0

啊哈!我完全忘了你可以做到這一點!非常感謝,這正是我正在尋找的。 – 2012-08-07 13:34:29

+0

同時感謝您糾正我對管道的使用。我知道他們被用於分組(foo | bar),並且在我的天真中,我認爲他們也是在角色類中。 – 2012-08-07 13:37:49

+0

這不需要'^ $'錨嗎? – Alnitak 2012-08-07 13:46:30