簡體   English   中英

正則表達式以雙引號或單引號匹配字符串,並以空格結尾

[英]Regex match string in double or single quote and follow by space

我正在嘗試匹配單引號或雙引號之間的字符串,並且必須在其后加上特定的文本。

input

<title ng-bind="'key_name' | i18n"></title>

或者可以是

<span class="sr-only">{{ 'key_name' | i18n }}</span>

要么

<span class="sr-only">{{ "key_name" | i18n }}</span>

我想捕獲那個key_name

這是我到目前為止所遇到的,但是失敗了。

["']([^)]+)["']\s|\si18n

以下正則表達式應為您工作:

["']([^"']+?)['"]\s*\|\s*i18n

在這里檢查:

http://regex101.com/r/aI1lX4

該表達式將適用於您發布的三個示例,但總的來說不是很靈活。

/(?:\{\{\s*|"\s*(?=')|'\s*(?="))((['"]).*?\2)\s\|\si18n/
// Without capturing quotes:
/(?:\{\{\s*|"\s*(?=')|'\s*(?="))(['"])(.*)?\1\s\|\si18n/

實際匹配將分別在[1][2] 您可能需要將某些\\s更改為\\s*\\s+

.*(["'])([^)]*?)\1\s*?\|\s*?i18n

正則表達式可視化

Debuggex演示

開頭的“。*”必須匹配最少的字符數。 對第一個捕獲的反向引用是為了確保兩個引號都匹配。 “ |”周圍可以有任意數量的空格。 不過,這是假設您要捕獲的文本中沒有未轉義的引號。 匹配結果在$ 2中,因為$ 1用於保持引號。

引號中的子字符串是否總是一個單詞,例如key_name 如果是這樣,這應該是您所需要的:

(["'])(\w+)\1\s*\|\s*i18n\b

如果沒有,這可能會使您正確:

(["'])([^'"]+)\1\s*\|\s*i18n\b

無論哪種情況,您要查找的零件都將被捕獲在第2組中。 如果您的需求比這更復雜,我們將需要更多信息。

暫無
暫無

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

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