[英]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的文章,了解可能的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.