[英]Parsing array syntax using regex in javascript
我在這里找到了答案,但是它在php中。
我想匹配[123, "hehe", "lala"]
這樣的數組,但[123, "hehe", "lala"]
是數組語法正確。
我做了這個正則表達式/\\["?.+"?(?:,"?.+"?)*\\]/
。
問題是,如果輸入為[123, "hehe, "lala"]
,則正則表達式匹配,但是語法不正確。
如何僅在數組語法正確的情況下使其匹配?
我的問題是使第二個"
匹配第一個"
時需要。
編輯:我只是想只用數組中的字符串和數字來做到這一點。
您可以嘗試使用此正則表達式: /\\[((\\d+|"([^"]|\\\\")*?")\\s*,?\\s*)*(?<!,)\\]/
每個項目應
"([^"]|\\\\")*?"
:以“開頭”和“結尾”,除“之外”。 如果包含“,則應將其轉義(\\“)。
\\d+
:一個數字
在每個項目之后
\\s*,?\\s*
:逗號,前后帶有任意數量的空格。
並且在右括號之前不應使用逗號: (?<!,)
為此,您必須具有兩個(或更多個)單獨的表達式(使用|
運算符)。
所以會是這樣的:
/\[\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.