【发布时间】:2016-06-26 19:13:09
【问题描述】:
假设我有一个函数icon_trans(icon),它将预期的输入替换为一个字符作为输出。该功能按预期工作正常,但存在一个问题。
当输入用于例如showers 输出应为 '。
当输入为snow moon 或snowmoon 时,输出应为;。
当输入为 sun 时,预期输出为 I。
但是,当输入为rain sun 或rainsun 时,输出为I,而不是预期的%。
这样做的原因是合乎逻辑的,因为正则表达式正在修补rain,然后是sun,并返回I,而不是rainsun%。
对于每个包含单词 sun 的输入(downpour sun、rain sun、flurries sun 等),都会发生同样的情况。
JS fiddle 将在问题的末尾。
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, ""); -
也许,您需要字边界:
/\b(?:showers|snowmoon|downpour|rain|sleet|snow|hail|downpoursun|rainsun|flurries|flurriessun|fog|haze|lightning|cloud|cloudsun|sun)\b/gi。 Yes, that is it. -
@WiktorStribiżew 这将如何匹配 OP 所希望的“雨阳”?
-
@Pointy:用
.replace(/\s+/g, '')删除空格,所以/rainsun/匹配rainsun。 jsfiddle.net/mxycuc0n/1
标签: javascript arrays regex replace