我希望匹配这些标签格式#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字符串。感谢。
答案 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