我有一個字符串,我想用#, ., [], or {}
字符來分割,就像在CSS中一樣。所需的功能是:
- 輸入: "div#foo[bar='value'].baz{text}"
- 輸出: ["div", "#foo", "[bar='value'", ".baz", "{text"]
JavaScript正則表達式匹配引號內的字符而不是字符集
這是很容易的,這個正則表達式: input.match(/([#.\[{]|^.*?)[^#.\[{\]}]*/g)
然而,這並不能忽略引號內的語法特點,我也喜歡它。 (e.x. "div[bar='value.baz']"
應該忽略.
)
如何使RegEx的第二部分([^#.\[{\]}]*
部分)不僅捕獲取反的字符集,還捕獲引號內的任何字符。換句話說,我怎樣才能將RegEx,(\"|').+?\1
應用到我的當前版本中。
編輯: 我已經想通了,工作體面,但不能處理轉義引號引號內(例如:"stuff here \\" quote "
)正則表達式。如果有人知道如何做到這一點,那將是非常有幫助的:
str.match(/([#.\[{]|^.*?)((['"]).*?\3|[^.#\[\]{\}])*/g);
這正是我所期待的,謝謝。 – Azmisov
我稍微修改了它以處理'{}'內部的引號和'[]'內部多個'bar = value':'str.match(/(^ | [\。#[\] {}])(( [^ '\#[\] {}] +)('[^ '] *')|?( '[^'] *'))+ /克)' – Azmisov