2017-06-10 170 views
1

我正在尋找一個解決方案來找到一個正則表達式,它會給我所有在兩個字符k-之間的所有內容。RegExp匹配兩個字符

例如:Get 1242k12-b

我試圖做一些自己的正則表達式,但沒有太大的成功,因爲我需要它來排除第一和最後一個字符。我試着用:

k(.*)\-

但它包括兩個字符。

我該如何做到這一點?

+0

你可以顯示你使用的代碼(不只是正則表達式模式)嗎? – CAustin

+1

對於'k',你必須在匹配後去掉這個。對於'-',你可以使用預見在它匹配之前停下來。 –

回答

1
function createRegExp(str, startChar, endChar) { 
    let regExpText = startChar + '(.*)' + endChar; 
    let expression = new RegExp(regExpText, 'g'); 
    return expression.exec(str)[1]; 
} 

該函數將帶3個參數。一個字符串,搜索開始的字符和搜索結束的字符,這兩個字符都不包含在返回的結果中。

在它的表達捕獲組的當前格式(.*)將是貪心,所以給定的字符串「abcdabcdabcd」和「a」和「d」字符,它將返回字符串「一個bcdabcdabc d的加粗部分'字符串,但使用惰性量詞(.*?)並給出相同的字符,它將返回字符串'a bc dabcdabcd'的粗體部分。

.exec函數返回一個包含2個元素的數組,其中第一個是表達式的完全匹配,它包含兩個提供的字符和之間的字符,而第二個數組元素只包含兩個提供的字符字符。

請謹慎動態地創建此RegExp,就像上面的示例中一樣,因爲某些字符需要在RegExp中轉義,否則它們將被視爲RegExp一般令牌。