《正則表達式經典實例(第2版)》——2.22 把匹配上下文插入到替代文本中
本節書摘來自異步社區《正則表達式經典實例(第2版)》一書中的第2章,第2.22節,作者: 【美】Jan Goyvaerts , Steven Levithan著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
2.22 把匹配上下文插入到替代文本中
問題描述
創建一個替代文本,用來把正則表達式匹配的文本替換為匹配之前的文本緊跟完整目標文本再緊跟匹配之後的文本。例如,如果在BeforeMatchAfter中找到的是Match,那麼把這個匹配換成BeforeBeforeMatchAfterAfter,最終得到的新文本是BeforeBefore BeforeMatchAfterAfterAfter。
解決方案
$`$_$'
替代文本流派:.NET、Perl
\`\`\&\'\'
替代文本流派:Ruby
$`$`$&$'$'
替代文本流派:JavaScript
討論
上下文(context)這個術語,指的是正則表達式所應用於的目標文本。總共存在3種上下文:正則匹配之前的目標文本、正則匹配之後的目標文本以及整個目標文本。在匹配之前的文本有時候被稱作左上下文(left context),而匹配之後的文本則相應地被稱作右上下文(right context)。整個目標文本則是左上下文、匹配再加右上下文。
.NET和Perl支持使用和«$_»來把所有3種形式的上下文插入到替代文本中。事實上,在Perl中每次成功的正則匹配之後都會賦值給這些變量,並且可以在任何代碼中使用,直到遇到下一次匹配嚐試。“美元符號+反引號”對應左上下文。在標準美式鍵盤上,你可以按鍵盤左上角1鍵左邊的鍵來輸入反引號。“美元符號+垂直引號”對應右上下文。垂直引號也就是通常的單引號。在標準美式鍵盤上,它位於分號和回車鍵(Enter)之間。“美元符號+下劃線”是整個目標文本。與.NET和Perl類似,JavaScript也使用« $` »和« $' »來代表左、右上下文。然而,JavaScript並沒有提供單個記號用於插入整個目標文本。你可以自己重構目標文本,把整個正則匹配通過« $& »添加到左、右上下文之間即可。
Ruby通過«`»和«\'»支持左、右上下文,並且使用«&»來插入整個正則匹配。與JavaScript一樣,Ruby中也不存在插入整個目標文本的記號。
最後更新:2017-06-06 07:35:48