簡體   English   中英

正則表達式查找所有字符串文字

[英]Regular expression to find all string literals

我正在使用 javascript 編寫正則表達式,旨在以 javascript 中允許的所有排列捕獲 javascript 代碼中的字符串文字。 這是我想出的:

([\"\'])(.*?(?:(\\"|\\').*?\3.*?)*?)\1

說明:正則表達式捕獲捕獲組 1 中的起始引號(" 或 '),並且引號在表達式的末尾 (\\1) 處重復以包含完整的字符串字面量。由於字符串的“主體”文字可以包含括在轉義引號中的子字符串(例如:“ab\\”cd\\“ef”)我允許匹配的轉義單引號和雙引號對出現在字符串文字文本中。捕獲組 3 用於匹配起始和結束轉義引號。字符串文字的內容將在捕獲組 2 中,刪除外部引號(用於將字符串括起來的標記將在捕獲組 1 中)。請注意,我使用 (?:..)使一組非捕獲。

我已經測試了下面字符串上的表達式,它似乎有效:

"abcdefg"                  // Simple string literal using ".."
'abcdefg'                  // Simple string literal using '..'    
"a\"b\"c\"d\"e\'f\'g"      // Escaped matched singles and doubles
"a\"b\"\"c\"\'d\'\'e\'fg"  // Another variant
"\"ab\"\'cd\'ef\"\"\'\'g"  // Zero length escaped sequences
"a'b'cd'ef'g"              // Enclosed in doubles, singles in middle
'"ab"cd"e""f"g'            // Enclose in singles, doubles in middle

我的問題是我需要考慮的 javascript 中是否還有其他允許的排列。 請注意,包含在雙引號字符串文字 ("ab'cde'fg") 中的單引號序列和包含在單引號字符串文字 ('ab"cde"fg') 中的雙引號序列不需要單獨處理(我認為),因為該模式與封閉的外部引號匹配。 我也很感激有關任何潛在跨瀏覽器問題的反饋 - 如果瀏覽器根本不支持正則表達式或不支持我在這里使用的功能(例如捕獲組或非捕獲語法)。

編輯:我試圖捕獲嵌入在字符串文字中的轉義字符串文字。 這使得這個問題陳述與regex-for-quoted-string-with-escaping-quotes 中表達的不同

您接受三字母序列"\\"作為字符串。 .*太包含了,你還需要避免它匹配反斜杠。

也許(['"])(?:(?!(?:\\\\|\\1)).|\\\\.)*\\1
匹配 ' 或 " 作為分隔符
然后匹配任意序列
- 非反斜杠、非分隔符、非行終止符
或者
- 反斜杠后跟任何非行終止符
然后再次匹配分隔符。

您仍然可能被注釋或 RegExp 文字中出現的分隔符所拋棄,fx

var m = /"/g.exec("a string"); // Matches a '"' char
//       ^^^^^^^^^^        ^^^^^^^^^^^^^^^^^^^ not strings!

所以在 JavaScript 源代碼中查找所有字符串並不完美。 為此,您實際上需要解析它。

暫無
暫無

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

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