2014-01-28 33 views
0

我想匹配这些类型的主题标签模式的#1#4321#1000而不是:的Javascript正则表达式用数字包括hashtag仅

  • #01(包含前导零)

  • #1aa(有字母字符)

但特殊字符如逗号,句号,冒号后的数字电话号码很好,如#1.。把它看作是句子或短语结尾的主题标签。基本上将这些视为空白。

基本上只是#和一个数字。

我下面的代码不符合要求,因为它需要前导零,并且末尾有一个很难看的空间。虽然我总是可以修剪的结果,但并不觉得这是做

reg = new RegExp(/#[0-9]+ /g); 
var result; 
while((result = reg.exec("hyha #12 gfdg #01 aa #2e #1. #101")) !== null) { 
    alert("\"" + result + "\""); 
} 

http://jsfiddle.net/qhoc/d3TpJ/

正确的方式将字符串应该只是匹配#12#1#101

请帮忙建议比我更好的RegEx字符串。谢谢。

+1

注:'新RegExp'是多余的,目的是当你有一个包含正则表达式的字符串 - 因为你已经有一个regexp文字只是使用'reg =/.../g' – Alnitak

回答

2

你可以使用像一个正则表达式:

#[1-9]\d*\b 

代码示例:

var re = /#[1-9]\d*\b/g; 
var str = "#1 hyha #12 ##5 gfdg #2e "; 
var matches = str.match(re); // = ["#1", "#12", "#5"] 
+0

是不是和'#\ d + \ b'一样? – Butt4cak3

+0

@ Butt4cak3,它不是。你的建议可以匹配OP不想要的#0123。 – Qtax

1

这应该工作

reg = /(#[1-9]\d*)(?: |\z)/g; 

通告哈希和数字捕获组(...),和非捕获(?: ..)只有在遵循时才匹配数字由空格或字符串结尾编辑。如果您不想在#1.中收集像#1这样的字符串,请使用此功能。否则,其他答案会更好。

然后,你必须从比赛遍历像这样得到的拍摄组:

myString = 'hyha #12 gfdg #01 aa #2e #1. #101'; 
match = reg.exec(myString); 
alert(match[1]); 

编辑

每当你使用正则表达式的工作,你应该使用某种工具。对于桌面比如,你可以使用The regex coach和网上,你可以试试这个regex101

例如:http://regex101.com/r/zY0bQ8