2013-03-07 156 views
2

對不起,如果它是一個令人困惑的問題。我試圖找到一種方法來做到這一點,但無法找到它,如果這是一個重複的問題,我的道歉!正則表達式匹配不帶引號的單引號文本 - JavaScript

我有一個文本是這樣的:something:"askjnqwe234"

我希望能夠用一個RegExp得到askjnqwe234。你可以注意到我想省略引號。我正在嘗試使用/[^"]+(?=(" ")|"$)/g,但它返回一個數組。我想要一個RegExt返回一個單一的字符串,而不是一個數組。

我不知道是否可能,但我不想指定數組的位置;是這樣的:

var x = string.match(/[^"]+(?=(" ")|"$)/g)[0];

謝謝!

+3

JavaScript正則表達式匹配函數總是返回一個數組或null(除了僅返回一個布爾值的'.test()')。 – Pointy 2013-03-07 17:08:34

回答

2

matchexec總是返回一個數組或null,因此,假設你有一個雙引號的值和字符串中沒有換行,你可以使用

var x; 
var str = 'something:"askjnqwe234"'; 

x = str.replace(/^[^"]*"|".*/g, ''); 
// "askjnqwe234" 

或者,如果你可以在字符串中有其他的引用值

x = str.replace(/.*?something:"([^"]*)".*/, '$1'); 

其中$1是指()之間的子模式[^"]*捕獲的子串。

根據要求進一步解釋。

儘管如此,我建議您容忍數組索引,並只使用match

+0

很高興知道!感謝你的回答! – Tomarto 2013-03-07 18:33:45

5

嘗試:

/"([^"]*)"/g 
英語

:尋找"了比賽,直到你看到另一個"記錄任何不"

1

您可以捕捉裏面像這樣的報價信息。假設它匹配:

var x = string.match(/something:"([^"]*)"/)[1]; 

索引1處的內存捕獲是雙引號內的部分。

如果你不知道它會匹配:

var match = string.match(/something:"([^"]*)"/); 

if (match) { 
    // use match[1] here 
} 
相關問題