我正在尝试解析一个从标签中得到的字符串,到目前为止看起来像正则表达式可能是最干净的方法.该模式有一个解释如下:
#p3 -> p = 3 #h4 -> h = [ 4 ] #h4,h6 -> h = [ 4,6 ] #p3,h4,h6 -> p = 3,h = [ 4,6 ] #h4,h6,p3 -> p = 3,6 ] #h4s2,6,10 -> h = [ 4 ],s = { "4": [ 2,10 ] } #h4s2,10,h6s5 -> h = [ 4,6 ],10 ],"6": [ 5 ] } #p20h4s2,h6s5,1 -> p = 20,"6": [ 5,1 ] }
正如我所说,我认为正则表达式可能是我最好的选择,但它也是任何复杂事物的弱点.
如果您有其他建议/解决方案,那么我欢迎他们.我可以使用if / else和很多indexOf和splits等来做到这一点……但我确信必须有一个更好的方法.
更新:左边的输出最好被认为是一种解释.虽然这是期望的最终结果,但正则表达式解决方案不必解决完整问题,但可能让我参与其中.另外,重申一下,我正在使用Javascript.
解决方法
这是一些代码来做到这一点.
var p,h = [],s = {}; var re = /[ph][0-9]+|s[0-9,]*[0-9]/g; var a; while ((a = re.exec(myhashtag)) !== null) { var first = a[0].substring(0,1); var rest = a[0].substring(1); if (first == 'p') p = parseInt(rest); else if (first == 'h') h.push(parseInt(rest)); else { a = rest.split(','); for (var i = 0; i < a.length; i++) a[i] = parseInt(a[i]); s[h[h.length - 1]] = a; } }
这仅使用正则表达式来查找看起来像p3或h4或s3,4,5的所有主题标签.其余的只是常规的JavaScript.
这段代码非常宽松.如果hashtag中包含无法解析的垃圾,例如#p3_banana_ * q4,则此代码会忽略它.如果hashtag包含这样的废话,那么编写更严格的代码会抛出错误可能会更好.