可以說我有一個函數icon_trans(icon)
,用char作爲輸出替換預期的輸入。該功能可以正常工作,但存在一個問題。Javascript的正則表達式替換影響單個詞
當輸入用於例如預計輸出爲'
。
當輸入爲snow moon
或snowmoon
時,預計輸出爲;
。
當輸入太陽輸出預計I.
BUT,當輸入rain sun
rainsun
或,輸出爲I
,而不是預期%
。
這樣做的原因是合乎邏輯的,因爲正則表達式是修補rain
然後sun
和返回太陽焦炭這是I
,而不是rainsun
一個是%
。
同樣的情況,對每個具有在它(downpour sun
,rain sun
,flurries sun
等)字sun
輸入。
JS小提琴將在問題的結尾。
function icon_trans(icon) {
icon = icon.replace(/\s+/g, ''); // remove whitespace
var mapObj = {
showers:"'",
snowmoon:";",
downpour:"*",
rain:"$",
sleet:"0",
snow:"9",
hail:"5",
downpoursun:"+",
rainsun:"%",
flurries:"6",
flurriessun:"7",
fog:"<",
haze:"?",
lightning:"F",
cloud:"!",
cloudsun:'"',
sun:"I"
};
icon = icon.replace(/showers|snowmoon|downpour|rain|sleet|snow|hail|downpoursun|rainsun|flurries|flurriessun|fog|haze|lightning|cloud|cloudsun|sun/gi, function(matched) {
icVar = mapObj[matched]
});
console.log(icVar);
}
謝謝!
你可以使用'match()'而不是'replace()' –
在執行替換操作之前刪除空格:'icon = icon.replace(/ \ s/g,「」);' – Pointy
也許,邊界:'/ \ b(?:陣雨|降雪|降雨|降雨|雨雪|冰雹|降雨|降雨| flurries | flurriessun | fog | haze | lightning | cloud | cloudsun | sun)\ b/gi'。 [**是的,就是**](https://jsfiddle.net/mxycuc0n/)。 –