JS Regex匹配字符串$

时间:2012-05-18 00:38:44

标签: javascript regex

我正在尝试编写一些可以查看推文的内容,并提取有关推文中提到的股票的信息。人们使用$在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]*);

感谢您的帮助,如果您想看到我遇到的下一个问题 Javascript AJAX scope inside of $.each Scope

2 个答案:

答案 0 :(得分: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);
});

这假设你在某个地方有一些逻辑可以获取给定股票名称的股票价值,然后将其替换(如果它找不到匹配项,它可能应该返回原始值,所以你不要破坏可爱的像“Barbara Streisand是$ ATAN”这样的推文。)

答案 1 :(得分: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);