2012-12-08 37 views
0

我想在版本控制提交消息中使用Redmine問題編號,它們是以#號開頭的數字,例如#123,#456等,但我只想匹配它們,如果它們被標點符號集所包圍,或者是該行的開始或結束。例如'#234aa,#567'應該只匹配#567。 ', - ;#456 ,,'應該匹配#456,因爲', - ; '都在標點字符集中。 我已經試過一個例子表達只有當它們被正確的標點符號包圍時,如何匹配正則表達式?

function myFunction() 
{ 
    var str="erwet,#3456 #623 #345 fdsfsd"; 
    var n=str.match(/\#[\d+]+[\s]/g); 
    document.getElementById("demo").innerHTML=n; 
} 

我也想將它們匹配到一個數組或列表,但我想演示它們匹配成一個字符串。

+0

澄清所以你基本上想忽略在這個標點符號集中被認爲是標點符號嗎?我對你的榜樣感到困惑。也許你可以告訴我們你在你的函數「erwet,#3456 ...」中定義的str應該匹配什麼。 – aug

+1

也許你正在尋找'\ b',如'#2aa#3;#4「.match(/#\ d + \ b/g);'。 – pimvdb

+1

根據[你以前的問題](http://stackoverflow.com/q/13775527/331508),這不是你需要問的。你想***從字符串中分離出那些refs,這樣你就可以包裹它們而不會丟失周圍的文本。 ... **當提問時,陳述您的真實目標,並鏈接到您以前的相關問題。**即使當前問題還不清楚,這將幫助人們解決真實問題。 –

回答

1

好了,所以我想我有一個正則表達式,沒有工作,但事實上,它的匹配標點符號在你的例子有點混亂,但在這裏做了兩句老話:

var re = /(?:^|['".,;:\s])(#\d+)(?:['".,;:\s]|$)/;​ 

它可以分解跌:

(?:^|['".,;\s]) //matches either the beginning of the line, or punctuation 
(#\d+)   //matches the issue number 
(?:['".,;:\s]|$)//matches either punctuation, whitespace, or the end of the line 

所以我們得到:

re.test('#234aa, #567') //true 
re.exec('#234aa, #567') //["#567", "#567", "", index: 8, input: "#234aa, #567"] 
re.test("', - ;#456,,'")//true 
re.exec("', - ;#456,,'")//[";#456,", "#456", index: 5, input: "', - ;#456,,'"] 

我不那麼肯定了0最後一點是,因爲這既不是標點符號也不是行尾,但是你在基本代碼中使用了它,所以我認爲它是你想要的東西。

+0

中描述的URL您的答案是否與標點符合?只有#xxx號碼需要匹配。當我嘗試重新表達時,我也會引用錯誤。是不是單引號或雙引號應該被轉義,或者它們在Javascript中可以使用。 – vfclists

+0

是你的代碼Javascript還是Python? – vfclists

+0

嗨,對不起,我已經在過去的幾個小時裏過得很開心。這段代碼是javascript,我通過將它粘貼到Chrome的控制檯來測試它,並且它看起來工作正常。在reg exp文本中(兩個正斜槓),你不需要轉義'或',它不會與標點符合,因爲這些組具有'?:'特殊字符。如果你想包含兩個標點符號從括號內的表達式中刪除'?:'希望這有助於 – kieran

相關問題