我想在版本控制提交消息中使用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 :(得分: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,,'"]
我对最后一点\s
不太确定,因为那既不是标点符号也不是行尾,但你在基本代码中有它,所以我认为它是你想要的东西。