簡體   English   中英

在javascript中使用正則表達式解析數組語法

[英]Parsing array syntax using regex in javascript

我在這里找到了答案,但是它在php中。

我想匹配[123, "hehe", "lala"]這樣的數組,但[123, "hehe", "lala"]是數組語法正確。

我做了這個正則表達式/\\["?.+"?(?:,"?.+"?)*\\]/

問題是,如果輸入為[123, "hehe, "lala"] ,則正則表達式匹配,但是語法不正確。

如何僅在數組語法正確的情況下使其匹配?

我的問題是使第二個"匹配第一個"時需要。

編輯:我只是想只用數組中的字符串和數字來做到這一點。

您可以嘗試使用此正則表達式: /\\[((\\d+|"([^"]|\\\\")*?")\\s*,?\\s*)*(?<!,)\\]/

每個項目應

"([^"]|\\\\")*?" :以“開頭”和“結尾”,除“之外”。 如果包含“,則應將其轉義(\\“)。

\\d+ :一個數字

在每個項目之后

\\s*,?\\s* :逗號,前后帶有任意數量的空格。

並且在右括號之前不應使用逗號: (?<!,)

演示: https : //regex101.com/r/jRAQUc/1

為此,您必須具有兩個(或更多個)單獨的表達式(使用|運算符)。

所以會是這樣的:

/\[\s*("[^"]*"|[0-9]+)(\s*,\s*("[^"]*"|[0-9]+))*\s*\]/

(您可能還想在開頭使用^ ,在結尾使用$ ,以確保在數組之前/之后沒有其他內容:/ /^...snip...$/ $ / /^...snip...$/匹配字符串。)

如果您需要帶指數的浮點數,請添加句點和'e'字符: [0-9.eE]+ (這就是為什么我不使用\\d+原因,因為在這種情況下只允許使用數字)。一個數字是有效的,顯然要復雜得多(符號,帶/不帶符號的指數,僅在小數點之前或之后的數字...)

您還可以支持單引號字符串。 那也是一個單獨的表達式: '[^']*'

您可能也想在方括號之前和之后都留有空格(開始: /^\\s*\\[...和結束: ...\\]\\s*$/ )。

最后,如果您想真正支持JavaScript字符串,則需要添加對反斜杠的支持。 像這樣的東西:( ("([^"]|\\\\.)*")

注意

您的.+表達式將匹配"並且,並且也沒有^$數組,如下所示將與您的表達式完全匹配:

This Array ["test", 123, true, "this"] Here

暫無
暫無

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

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