2011-06-02 41 views
0

我需要找到在使用ActionScript 3(AS3)本文所有哈希标签内的所有哈希标签:查找文本

Lorem存有悲#sit_amet,consetetur sadipscing,sed的直径#,nonumy eirmod tempor #invidunt ut labore #et

这样做的好方法是什么? 谢谢 弗兰克

+0

我从未听说过之前“主题标签”的,但一个快速搜索显示了大量的Twitter垃圾。因此,据说Twitter的文档应该至少有一个列表,这就是你需要开始你的“hashtag's”列表的地方,那么你可以在你编译列表后解析它们。 – 2011-06-02 22:56:35

回答

1
// your data: 
var data:String = "Lorem ipsum dolor #sit_amet, consetetur sadipscing, sed #diam-nonumy eirmod tempor #invidunt ut labore #et"; 

// this regular expression will match most "normal" characters, add more as needed 
// it will stop at the first whitespace or linebreak it hits 
var regex:RegExp = /(\#[a-zA-Z0-9_%-]*)/g; 

// this object will be used to store our results 
var result:Object; 

// now, we run the regex until it returns null, 
// that means there's nothing more that matches 
while (result = regex.exec(data)) { 
    // since we're not using groups or anything, all we want is the 0 in the object 
    trace(result[0]); 
} 

这将跟踪:

#sit_amet 
#diam-nonumy 
#invidunt 
#et 
+0

实际上,您将整个比赛分组,并且您也会匹配单个哈希值。黑名单,而不是白名单也许会更容易,这是一个这样的正则表达式的开始:/#[^ \ s,] +/g – 2011-06-02 23:43:02

+0

非常感谢! RegExp非常有趣。是否还有一种聪明的方法可以在文本之后从文本中删除找到的标签? – Frank 2011-06-03 00:45:31

+0

我已用新的答案回答了此问题。 – TheDarkIn1978 2011-06-03 04:28:51

1

详细阐述“发现”,因为我不知道你想怎么处理它们。

那说,这可能会满足您的需求:

var str:String = "Lorem ipsum dolor #sit_amet, consetetur sadipscing, sed #diam-nonumy eirmod tempor #invidunt ut labore #et"; 
var array:Array = str.split("#"); 

你的阵列将包含以下 - 你可以用哈希预先考虑再次得到一个主题标签:

0:Lorem存有悲
1:sit_amet,consetetur sadipscing,sed的
2:直径-nonumy eirmod tempor
3:invidunt UT labore
4:等

如果这并不完全是你之后的话,那么你可能需要研究超出我的知识范围的正则表达式。

0

RE:有没有也 一个聪明的方式从文本 然后删除找到的标签?

你只是想删除实际的散列标签或散列标签及其标签的词吗?

这会从字符串中删除只哈希标签:

myString.replace(new RegExp("#", "g"), "")); 

,而这将删除哈希标签,并从字符串的标签字:

myString.replace(new RegExp("#\\w*", "g"), "") 

一个完整的教程和正则表达式的参考可以在这里找到:http://www.regular-expressions.info/

-

编辑:

它有点复杂,因为您要替换散列标签之间的部分字符串,而整个字符串本质上是整个散列标签之间。因此,如果不编写自己的字符串分析器,使用简单的正则表达式查找将不会很简单。

,但这样的事情可以工作:

var stringData:String = "#Lorem # et #ipsum dolor #sit_amet, consetetur sadipscing, sed #diam et #word# #_hello_# #-word# #word# #1a# #2WORD2# #2012# #word-3# #word_3# #word 3#"; 

trace(stringData.replace(new RegExp("#(.*?)#", "g"), "")); 
+0

我没有得到它的工作。我试图删除两个哈希字符之间的所有单词。这是我的AS3代码:'var mystring =“#Lorem#et #ipsum dolor #sit_amet,consetetur sadipscing,sed #diam et#word##_hello_##word##word#########2WORD2##2012# #word-3##word_3##word 3#“; // var regex:RegExp = /(\#[a-zA-Z0-9 _% - ] *#)/ g; var myresult:Object; // 功能removewords(){ 而(myresult = regex.exec(MyString的)){ 了mystring = mystring.replace(myresult [0], “”) } // 迹(MyString的) } // removewords() '看起来数字问题有问题。有任何想法吗? – Frank 2011-06-03 22:28:01

+0

看到编辑答案 – TheDarkIn1978 2011-06-04 06:42:06