2

我正在尝试写一些可以查看推文并提取推文中提到的股票信息的东西。人们使用 $ 来引用 Twitter 上的股票代码,但我无法逃避 $。

我也不想匹配任何价格提及或类似的东西,所以基本上匹配 $AAPL 而不是 $1500

我在想它会是这样的

\b\$[a-zA-Z].*\b

如果有多个匹配 id 喜欢以某种方式循环它们,比如

while ((tweet = reg.exec(sym_pat)) !== null) {
   //replace text with stock data.
}

这个表达式给了我一个意外的非法令牌错误

 var symbol_pat = new RegExp(\b\$[a-z]*);

如果您想查看我在 $.each 范围内遇到 Javascript AJAX 范围的下一个问题,感谢您的帮助

4

2 回答 2

2

好的,您已经声明您想用它们的实际库存值替换匹配项。因此,您需要获取所有匹配的元素(股票代码名称),然后对于每个匹配项,您将用股票值替换它。

答案将与该句子非常相似地“阅读”。

假设有一个tweet变量是您要处理的特定推文的内容:

tweet.match(/\b\$[A-Za-z]+\b/g).forEach(function(match) {
    // match looks like '$AAPL'
    var tickerValue = lookUpTickerValue(match);
    tweet.replace(match, tickerValue);
});

这是假设您在某处有一些逻辑可以获取给定股票名称的股票代码值然后替换它(如果找不到匹配项,它可能应该返回原始值,因此您不会破坏可爱的推文,例如“芭芭拉史翠珊是 $ATAN")。

于 2012-05-18T00:55:16.670 回答
1
var symbol_pat = new RegExp('\\b\\$[a-z]+\\b','gi');
// or
var symbol_pat = /\b\$[a-z]+\b/gi;

此外,由于某种原因,JS 无法通过 计算单词的开头\b,它只会捕获末尾的单词。

编辑:如果您要替换股票代码,您可以replace通过函数使用基本方法并将该数据替换为预定义值:

var symbol_pat = /(^|\s)(\$[a-z]+\b)/gi;
var stocks = {AAPL:1,ETC:2}
var str = '$aapl ssd $a a$s$etc $etc';
console.log(str);
str = str.replace(symbol_pat, function() {
    var stk = arguments[2].substr(1).toUpperCase();
    // assuming you want to replace $etc as well as $ETC by using
    // the .toUpperCase() method
    if (!stocks[stk]) return arguments[0];
    return arguments[0].replace(arguments[2],stocks[stk]);
});
console.log(str);
于 2012-05-18T00:53:10.910 回答