2009-10-14 101 views
8

後,我有一個字符串,它看起來像JavaScript的比賽子正則表達式

something30-mr200 

我想獲得的mr(基本#,然後按MR)之後的所有*總是有將是-mr

任何幫助將不勝感激。

回答

0

如何找到-mr的位置,然後從那裏得到子字符串+3?

這不是正則表達式,但似乎工作給你的描述?

4
var result = "something30-mr200".split("mr")[1]; 

var result = "something30-mr200".match(/mr(.*)/)[1]; 
+0

你忘了關字符串'「mr' – 2009-10-14 20:33:22

+0

謝謝,現在固定 – Kamarey 2009-10-14 20:35:08

4

爲什麼不乾脆:

-mr(\d+) 

然後獲取捕獲組的內容是什麼?

2

什麼:

function getNumber(input) { // rename with a meaningful name 
    var match = input.match(/^.*-mr(\d+)$/); 

    if (match) { // check if the input string matched the pattern 
    return match[1]; // get the capturing group 
    } 
} 

getNumber("something30-mr200"); // "200" 
+0

哇,幾乎相同的解決方案,幾乎在同一時間。乾杯:) – treznik 2009-10-14 20:40:10

+1

您確定要測試'匹配[1]'嗎?如果它是'0',將被評估爲* false * – Gumbo 2009-10-14 20:57:07

+1

@Gumbo:它不會評估錯誤,因爲比賽是**字符串**而不是** Numbers **,i如果match [1]是一個空字符串,t只會計算爲false。 – CMS 2009-10-14 21:05:33

18

您可以使用像一個巴特一個正則表達式送給你,但我建議使用匹配,而不是取代,因爲萬一找不到匹配,其結果是整個字符串當使用替換時,而使用匹配時爲空,這看起來更合乎邏輯。 (儘管如此)。

像這樣的事情會做的伎倆:

functiong getNumber(string) { 
    var matches = string.match(/-mr([0-9]+)/); 
    return matches[1]; 
} 
getNumber("something30-mr200"); 
1

這可能會爲你工作:

// Perform the reg exp test 
new RegExp(".*-mr(\d+)").test("something30-mr200"); 
// result will equal the value of the first subexpression 
var result = RegExp.$1; 
+0

沒有必要包含第一個'。*',並且連字符不需要轉義。這也適用:''-mr(。*)「'。但'。*'是危險的:如果在''-mr''之後有更多的文本''''''''將會「吃」它。當然,OP沒有真正清楚''-mr''後面會出現什麼文字。 – 2009-10-14 20:56:44

+0

這是一個好點。我假設OP會在「-mr」之後想要所有的東西。我修改了代碼以在連字符前移除轉義並將子​​表達式限制爲數字。我比任何事情都擺脫了習慣。 :) – 2009-10-14 21:00:11

相關問題