簡體   English   中英

Javascript中的特定正則表達式正面看起來(前后)

[英]Specific regex positive look(around|ahead|behind) in Javascript

我想匹配/(?=\\W)(gimme)(?=\\W)/gi或類似的。 \\W應該是零寬度字符以包圍我的實際匹配。

也許有些背景。 我想要添加一些文字填充來替換某些單詞(總是\\w+ ),但前提是它沒有被\\w包圍。 (這聽起來像是一個負面的看法,但我聽說JS不會做那些!?)

(順便說一下:上面的“gimme”是我要替換的字面文字。如果那不明顯。)

它必須是(?)一個環視,因為\\W必須是零寬度,因為意圖是.replace(...)而我無法替換/復制周圍的字符。

所以這不起作用:

text.replace(/(?=\W)(gimme)(?=\W)/gi, function(l, match, r) {
  return l + doMagic(match) + r;
})

零寬度字符必須被忽略,所以該函數可以返回(和替換) doMagic(match)

我只有非常有限的外觀經驗,而不是JS。 感恩教堂。

PS。 或者我可能需要一個lookbehind,那些在JS中不受支持..? 我糊塗了?

PS。 一點上下文: http//jsfiddle.net/rudiedirkx/kMs2N/show/ (哦鏈接!)

  • 您可以使用單詞邊界快捷鍵\\b來斷言它是您匹配的整個單詞。

  • 實現您想要做的最簡單的方法可能是匹配:

/(\\s+gimme)(?=\\W)/gi

並用[yourReplacement]替換 - 即在'gimme'之前捕獲空格,然后在替換中包含一個空格。

  • 另一種方法是在gimme文字之前和之后捕獲更多字符,然后使用帶反向引用的組:

(\\W+?)gimme(\\W+?) - 您的匹配 - 請注意,此時前后字符位於捕獲組1和2中

並且你想要使用\\1[yourReplacement]\\2作為替換字符串 - 不確定如何在JS中使用反向引用,但是想法是告訴引擎使用\\1表示第一個捕獲括號匹配的內容。 在某些語言中,這些是用$1訪問的。

你現在擁有的東西是行不通的,因為以下原因, (?=\\W)意味着“下一個字符不是單詞字符”,你想要匹配的下一個字是字面g ,所以你有一個矛盾( “下一個字符是g ,但不是字母”)。

你確實需要一個lookbehind,但JavaScript不支持它們。

查看有關JavaScript中Mimicking Lookbehind的文章,了解可能的方法。

你考慮過使用詞法分析器/解析器組合嗎?

這個是基於javascript的,並帶有一個漂亮的演示

暫無
暫無

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

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