2012-05-18 48 views
2

我正在嘗試編寫一些內容,用於查看推文並提供有關推特中提及的股票的信息。人們使用$引用Twitter上的股票代碼,但我不能逃避$。

我也不用想匹配任何價格提或類似的東西所以基本匹配$ AAPL而不是$ 1500

我想這會是這樣的

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

如果有多個匹配我還想循環通過他們不知何故所以像

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

+0

你在正確的軌道上,但你應該放棄點。你想匹配重複'[a-zA-Z]',而不是單個出現'[a-zA-Z]'後的任何字符('.'),對嗎? –

+0

你是先生。 – BillPull

+0

另外,給字符加上一個加號。使它不僅匹配單個字符。元素'[a-zA-Z] +' – inhan

回答

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); 
2

好吧,你說,你想用他們的實際股票價值取代匹配。因此,您需要獲取所有匹配元素(股票代碼名稱),然後爲每場比賽您將用股票價值替換它。

答案將「讀」與該句子非常相似。

假設有一個tweet變量,它是一個特定的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 is $ ATAN」那樣修改可愛的推文)。