我写了some regex,它可以查看一个字符串并抽取可变数量的匹配项。这些匹配项是由特殊的起始字符串确定的,但是如果它们位于字符串的开头,则会有些不同,并且也不应该将它们收集在结果中。 (请原谅我缺乏适当的正则表达式术语!)它可能写得不太好,但大多数情况下都有效。问题在于它使用了后向功能,而Firefox仍然不支持此功能。因此,我很乐意为您提供一些帮助。这是一个示例:
/(?<=(?:^| +)#).+?(?:(?= +[#>:].+)|$)/g
一些投入和预期产出:
hello #a tag here #another tag :something else #tags
-> ['a tag here', 'another tag', 'tags']
#tag
-> ['tag']
#x #
(字符串开头的空格,由于某种原因SO正在将其删除)-> ['x']
#x #y
-> ['x', 'y']
#x#y
-> ['x#y']
干杯!
答案 0 :(得分:0)
您可以捕获所需的子字符串:
/(?:^| )#(.+?)(?= +[#>:]|$)/g
请参见regex demo。要匹配任何空白字符,请用\s
替换模式中的常规空格。
详细信息
(?:^| )
-字符串或空格的开头#
-一个#
字符(.+?)
-除换行符以外的任何1个或多个字符,应尽可能少(?= +[#>:]|$)
-此位置必须有字符串结尾,或者1+空格后跟#
,>
或:
。
var strs = ['hello #a tag here #another tag :something else #tags','#tag','#x #y','#x#y',' #x'];
for (var s of strs) {
var rx = /(?:^| )#(.+?)(?= +[#>:]|$)/g;
console.log(s);
var m, res = [];
while (m=rx.exec(s)) {
res.push(m[1]);
}
console.log(res);
}