我寫以提取由引號(「)。我用jQuery中下面的語句來得到它。正則表達式是不允許「並允許」
var item = objstr.match(/\"(([^\"])*)\"/g);
包圍字符串,但我想打一個\「的例外情況被允許。
我寫以提取由引號(「)。我用jQuery中下面的語句來得到它。正則表達式是不允許「並允許」
var item = objstr.match(/\"(([^\"])*)\"/g);
包圍字符串,但我想打一個\「的例外情況被允許。
此正則表達式可能工作爲好,不使用查找aheads或查找屁股:(!空格去掉)
/" (\\\\ | \\" | [^"])* "/
閱讀:從雙引號匹配字符串以雙引號。在這兩者之間可能有或沒有逃脫反斜槓\\
的任意組合,逃脫雙引號\"
或任何非引號字符。這允許輸入像
"abc\\abc\abc\"abc\\\"abc"
是有效的,但不是
"abc\\"abc"
// ^String terminates here
你可能想,如果你的字符串可能有轉義意義\"
。
從@nickb答案不具有此特性/錯誤,無論你怎麼稱呼它。兩個字符串在他的正則表達式中都是有效的。
如果您的正則表達式引擎能夠關閉回溯,這是使用它的時間。在Perl中,我必須添加一個+
的量詞(或轉向深奧的分支重置)。我不知道你需要什麼。
/" (\\\\ | \\" | [^"])*+ "/
我們也希望貪婪行爲,所以沒有*?
結構。
我從http://writecodeonline.com/javascript/測試下面的代碼:
var s = "wwww\"ooxx\\\"xyz\"";
var foo = s.match(/"(?:[^\\"]|\\.)*"/);
document.write(foo[0]);
這個問題已經被問了很多次,它總是引起同樣的明顯,但是,不正確的答案。 ;)
負回顧後發的方法 - (?<!\\)"
- 不工作,因爲它沒有考慮到爲逃脫的反斜槓。我知道,這不是在問題中提到,但如果原文用反斜槓轉義引號,你應該假設除非特別指出,它使用他們逃離其他反斜槓,太。
的交替的方法 - "(?:[^\\"]|\\.)*"
- 以逃脫反斜槓,但不正確的交易。並且增加另一個替代方案 - "(\\\\|\\"|[^"])*"
- 不能解決它。它匹配有效的輸入沒關係,但給出這樣一個畸形的字符串:
"escaped \"quotes\" but no ending quote
...而不是報告一個失敗的比賽,因爲它應該,它錯誤地匹配這樣的:
"escaped \"quotes\"
這裏是最好的方法,因爲在使用RegexBuddy的庫中找到並討論了The Book:
/"[^"\\]*(?:\\.[^"\\]*)*"/g
如果匹配的字符串不應該包括行分隔符(如Java字符串),使用此:
/"[^"\\\r\n]*(?:\\.[^"\\\r\n]*)*"/g
其他方法是可能的,但這一個有三個主要先行tages:它已經被證明很多次了。它非常有效;它不依賴於高級功能 - 換句話說,它甚至可以在JavaScript中使用,它是Perl衍生的正則表達式的紅頭髮的繼承人。 :D
你試過了什麼? – 2012-08-01 23:14:31
到目前爲止,您嘗試過哪些方法不適合您?你使用什麼樣的正則表達式(PCRE,perl,.NET)?請編輯您的問題以添加您所做的工作,併爲相應的正則表達式引擎添加標記。如果你提供給我們的信息,你很可能會得到幫助(你也會更快地獲得幫助)。 – 2012-08-01 23:16:09