谁知道del.icio.us如何解析标签啊? 就是用怎样的正则表达式来Split目标串为多个标签? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一次用正则做delimiter会麻烦一些。如果在""中没有空格的话,处理起来会好很多。<script>var s='abc def "somegood" okabc def';alert(s.split(/( ")|(" )| /))</script> 那就可以做两次吧?先找两边带引号的。即先把“abc def "some good" ok”拆成abc def 《--- 1some good 《--- 2ok但现在又有新问题了,结果1实际上是两个标签,而结果2只有一个,如何来区分它呢?尤其是在标签数量比较多的情况下。 <script>s = 'abc def "some good" ok';t = s.match(/(["']).+\1|\w+/g);document.write(t);</script> 谢谢 xuzuning(唠叨),不过你给的RE有些BUG。1、需要把.+改成非贪婪的,否则匹配含有两个带空格的串时会有点小错误如: abc def "some good" "this is" ok 2、英文双引号之间如果还有若干多个引号,如果这些在中间的引号的后一个字符不是空格(主要是针对起闭合作用的最后一个引号的判断),则整个词组应被认为是一个标签。如 abc "so"me g"ood" 应该被识别为两个标签:abc和so"me g"ood3、对于不构成词组的引号,应当只认为它是标签的一部分。如 abc so"me g"ood 应该就是三个标签:abc、so"me、g"ood。 这个问题其实并不是特别简单,有许多情况需要考虑。如果能解决的话,大家以后在处理Tag及类似对象时,就可以直接用了:)我能想到的一些测试例子(左边是用户的输入,右边是分隔好的标签):abc "some good" "this is" ok -》 abc|some good|this is|ok"some good" abc "this is" ok -》 some good|abc|this is|ok"so"me g"ood" abc "this is" -》so"me g"ood|abc|this is"so "me g" ood" "ab"c" -》 so"me g|ood"|ab"c另外,由于用户在输入标签时,可能打开了中文输入法,所以标签之间很可能使用全角的中文空格分隔,也需要考虑。也就是说英文空格和全角中文空格的作用应该是一样的。把以上例子中的英文空格部分地或全部地代换为中文空格,如果都能正确处理,那么这个问题就可以结了:)如需要额外讨论,可以另开一帖的。谢谢大伙! 我的答案是:(?!")[^\x20]+|"[^"]*"测试页面:(推荐)http://www.regexlab.com/zh/workshop.asp?pat=%28%3F%21%22%29%5B%5E%5Cx20%5D%2B%7C%22%5B%5E%22%5D*%22&txt=abc%20def%20%22some%20good%22%20ok&dlt=0 谢谢楼上的兄弟,不过不好意思,你给的RE只能Match我给的第一个例子,后三个都是错误的。 经过修改:(?!")[^\s]+|"([^"]|"(?!\s))*"测试页面:(推荐)http://www.regexlab.com/zh/workshop.asp?pat=%28%3F%21%22%29%5B%5E%5Cs%5D%2B%7C%22%28%5B%5E%22%5D%7C%22%28%3F%21%5Cs%29%29*%22&txt=abc%20%20abc%22def%20%20%20%22some%20good%22%20%20%22some%22good%22%20ok&dlt=0 abc "some good" "this is" ok -》 abc|some good|this is|ok"some good" abc "this is" ok -》 some good|abc|this is|ok"so"me g"ood" abc "this is" -》so"me g"ood|abc|this is"so "me g" ood" "ab"c" -》 so"me g|ood"|ab"c首先,下边这两个就看不出什么规则了。其次,是不是凭这四个例子就代表了所有情况?你自己是否清楚所有的规则,如果清楚就一条一条的写出来,再拿给别人看看有没有写明白,然后再拿出来问,这样是浪费大家的时间。写来写去只能猜你想干什么,是不是太没意思了。 下面两个(第三行、第四行)规则很明显:3、英文双引号之间如果还有若干多个引号,如果这些处在中间位置的引号的后一个字符不是空格(主要是针对起闭合作用的最后一个引号的判断),则整个词组应被认为是一个标签,并且此引号也仅就是一般字符,不具备构成词组的功能。如 abc "so"me g"ood" 应该被识别为两个标签:abc和so"me g"ood再如 "so"me g"ood" abc "this is"应该被识别为三个标签:so"me g"ood、abc、this is4、对于不构成词组的引号,应当只认为它是标签的一部分。如 abc so"me g"ood 应该就是三个标签:abc、so"me、g"ood。再如:"so "me g" ood" "ab"c"应该被识别为三个标签:so"me g(因为字母g后面的引号有空格,所以与s前面的引号构成一对)、ood"(字母d后面虽然有引号,但是没有前导引号与之构成完整的一对,所以此引号只是标签的内容)、ab"c(引号不但可以用来标示词组,当然也应该兼容一个单词的情况)PS:我也就一个人在业余研究这个东西,目标是想有一个比del.icio.us更加完善的Tag划分方法。有怎样的要求,我自己当然清楚。我把这些要求浓缩归纳为四条例子,简易直观,总比啰啰嗦嗦说一大堆又说不清楚好。同时我很奇怪,为什么别的兄弟能看懂,有星星的你就看不懂??真的全部是我的原因么? To sswater(光杆兵):太感谢你的回复了!那四个例子都能正确地通过测试,等稍后我做一下完整的测试就结帖。对了,有空的话,你也到这里回一下帖:http://community.csdn.net/Expert/TopicView.asp?id=4920147好处嘛,是明显地,呵呵 :) To sswater(光杆兵):经过多方面,反复地测试,还在http://www.regexlab.com/zh/workshop.asp处测试了,发现《"this is"good 》达不到预期的效果。原因是:作为词组起始引号的第一个引号,并没有一个闭合引号(即这样的一个引号:其后紧接的是一个空格或字符串结束符)。在这种没有闭合的情况下,《"this is"good 》应该被分为两个标签:"this和is"good,而不是this is和good。如此的处理是否可以实现?再次表示感谢!PS:再顺便测试一下这个例子吧: 《"so good"abc "this one》应为"so|good"abc|"this|one---------------------------其它的兄弟也可以讨论讨论的啊,谢谢! "([^"]|"(?=\S))*"(?!\S)|\S+测试页面:(推荐)http://www.regexlab.com/zh/workshop.asp?pat=%22%28%5B%5E%22%5D%7C%22%28%3F%3D%5CS%29%29*%22%28%3F%21%5CS%29%7C%5CS%2B&txt=abc%20abc%22def%20%22some%20good%22%20%22some%22good%22%20%22this%20is%22good%20%22one&dlt=0 感谢sswater(光杆兵) 的回答,结帖! javascript调用webservice 广告不动,不能执行Jquery代码。什么原因? 求Jeditable插件 十六进制转十进制怎么转 关于移动表格行的问题 ajax全称名字叫异步javasscript 和XML,请问 这个异步指的是什么? 怎样用脚本清除<table></table>中的所有标签和文本? 如何实现下载功能?一定给分! FusionCharts柱状图显示问题 求问个html中表格显示的问题 哪位知道DTD为什么会对Javascript产生影响? createElement建立的radio不能被选择 怎么回事 只有20分了
var s='abc def "somegood" okabc def';
alert(s.split(/( ")|(" )| /))
</script>
即先把“abc def "some good" ok”拆成
abc def 《--- 1
some good 《--- 2
ok但现在又有新问题了,结果1实际上是两个标签,而结果2只有一个,如何来区分它呢?尤其是在标签数量比较多的情况下。
s = 'abc def "some good" ok';
t = s.match(/(["']).+\1|\w+/g);
document.write(t);
</script>
如: abc def "some good" "this is" ok 2、英文双引号之间如果还有若干多个引号,如果这些在中间的引号的后一个字符不是空格(主要是针对起闭合作用的最后一个引号的判断),则整个词组应被认为是一个标签。
如 abc "so"me g"ood" 应该被识别为两个标签:abc和so"me g"ood3、对于不构成词组的引号,应当只认为它是标签的一部分。
如 abc so"me g"ood 应该就是三个标签:abc、so"me、g"ood。
如果能解决的话,大家以后在处理Tag及类似对象时,就可以直接用了:)我能想到的一些测试例子(左边是用户的输入,右边是分隔好的标签):abc "some good" "this is" ok -》 abc|some good|this is|ok"some good" abc "this is" ok -》 some good|abc|this is|ok"so"me g"ood" abc "this is" -》so"me g"ood|abc|this is"so "me g" ood" "ab"c" -》 so"me g|ood"|ab"c另外,由于用户在输入标签时,可能打开了中文输入法,所以标签之间很可能使用全角的中文空格分隔,也需要考虑。也就是说英文空格和全角中文空格的作用应该是一样的。把以上例子中的英文空格部分地或全部地代换为中文空格,如果都能正确处理,那么这个问题就可以结了:)如需要额外讨论,可以另开一帖的。谢谢大伙!
(?!")[^\x20]+|"[^"]*"测试页面:(推荐)
http://www.regexlab.com/zh/workshop.asp?pat=%28%3F%21%22%29%5B%5E%5Cx20%5D%2B%7C%22%5B%5E%22%5D*%22&txt=abc%20def%20%22some%20good%22%20ok&dlt=0
(?!")[^\s]+|"([^"]|"(?!\s))*"测试页面:(推荐)
http://www.regexlab.com/zh/workshop.asp?pat=%28%3F%21%22%29%5B%5E%5Cs%5D%2B%7C%22%28%5B%5E%22%5D%7C%22%28%3F%21%5Cs%29%29*%22&txt=abc%20%20abc%22def%20%20%20%22some%20good%22%20%20%22some%22good%22%20ok&dlt=0
首先,下边这两个就看不出什么规则了。
其次,是不是凭这四个例子就代表了所有情况?
你自己是否清楚所有的规则,如果清楚就一条一条的写出来,再拿给别人看看有没有写明白,然后再拿出来问,这样是浪费大家的时间。
写来写去只能猜你想干什么,是不是太没意思了。
如 abc "so"me g"ood" 应该被识别为两个标签:abc和so"me g"ood
再如 "so"me g"ood" abc "this is"应该被识别为三个标签:so"me g"ood、abc、this is4、对于不构成词组的引号,应当只认为它是标签的一部分。
如 abc so"me g"ood 应该就是三个标签:abc、so"me、g"ood。
再如:"so "me g" ood" "ab"c"应该被识别为三个标签:
so"me g(因为字母g后面的引号有空格,所以与s前面的引号构成一对)、
ood"(字母d后面虽然有引号,但是没有前导引号与之构成完整的一对,所以此引号只是标签的内容)、
ab"c(引号不但可以用来标示词组,当然也应该兼容一个单词的情况)PS:我也就一个人在业余研究这个东西,目标是想有一个比del.icio.us更加完善的Tag划分方法。有怎样的要求,我自己当然清楚。我把这些要求浓缩归纳为四条例子,简易直观,总比啰啰嗦嗦说一大堆又说不清楚好。同时我很奇怪,为什么别的兄弟能看懂,有星星的你就看不懂??真的全部是我的原因么?
http://community.csdn.net/Expert/TopicView.asp?id=4920147
好处嘛,是明显地,呵呵 :)
发现《"this is"good 》达不到预期的效果。
原因是:作为词组起始引号的第一个引号,并没有一个闭合引号(即这样的一个引号:其后紧接的是一个空格或字符串结束符)。在这种没有闭合的情况下,《"this is"good 》应该被分为两个标签:"this和is"good,而不是this is和good。如此的处理是否可以实现?再次表示感谢!PS:再顺便测试一下这个例子吧:
《"so good"abc "this one》应为"so|good"abc|"this|one
---------------------------
其它的兄弟也可以讨论讨论的啊,谢谢!
http://www.regexlab.com/zh/workshop.asp?pat=%22%28%5B%5E%22%5D%7C%22%28%3F%3D%5CS%29%29*%22%28%3F%21%5CS%29%7C%5CS%2B&txt=abc%20abc%22def%20%22some%20good%22%20%22some%22good%22%20%22this%20is%22good%20%22one&dlt=0