仅用数字标记的Javascript正则表达式

时间:2014-01-28 09:47:51

标签: javascript regex

我希望匹配这些标签格式#1#4321#1000而不是:

  • #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字符串。感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式:

#[1-9]\d*\b

代码示例:

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

答案 1 :(得分: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]);

修改

每当使用regexp时,都应使用某种工具。例如,对于桌面,您可以使用The regex coach并在线使用此regex101

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