gpt4 book ai didi

javascript - 正则表达式作为开关盒

转载 作者:行者123 更新时间:2023-11-29 21:58:11 25 4
gpt4 key购买 nike

我有一首歌的歌词,我正在使用一个功能来突出显示歌词的各个部分。代码如下所示:

var span        = {
intro : '<span style="color: Magenta ;">',
verse : '<span style="color: DodgerBlue;">',
prechorus : '<span style="color: DeepPink;">',
chorus : '<span style="color: Tomato;">',
bridge : '<span style="color: LimeGreen;">',
outro : '<span style="color: Magenta ;">',
repeat : '<span style="color: Silver;" title="Repeat">',
close : '</span>',
};

function highlight(lyrics) {
var highlighted = lyrics.replace(/\[.*\]/g, function(match) {
switch(match) {
case "[Intro]": return span.io + match + span.close; break;
case "[Verse 1]": return span.verse + match + span.close; break;
case "[Verse 2]": return span.verse + match + span.close; break;
case "[Verse 3]": return span.verse + match + span.close; break;
case "[Verse 4]": return span.verse + match + span.close; break;
case "[Verse 5]": return span.verse + match + span.close; break;
case "[Pre-Chorus 1]": return span.prechorus + match + span.close; break;
case "[Pre-Chorus 2]": return span.prechorus + match + span.close; break;
case "[Pre-Chorus 3]": return span.prechorus + match + span.close; break;
case "[Pre-Chorus 4]": return span.prechorus + match + span.close; break;
case "[Chorus 1]": return span.chorus + match + span.close; break;
case "[Chorus 2]": return span.chorus + match + span.close; break;
case "[Chorus 3]": return span.chorus + match + span.close; break;
case "[Chorus 4]": return span.chorus + match + span.close; break;
case "[Chorus 5]": return span.chorus + match + span.close; break;
case "[Bridge 1]": return span.bridge + match + span.close; break;
case "[Bridge 2]": return span.bridge + match + span.close; break;
case "[Outro]": return span.io + match + span.close; break;
}
});
return highlighted.replace(/\(R.{0,3}\)/g, span.repeat + "$&" + span.close);
}

highlight 函数需要一个文本。首先,它找到括号中的字符串(歌词部分的标题),然后使用 switch,检查找到的匹配项并将它们包装在相应的 span 标记中。

我的问题是我不想使用五种不同的大小写来替换诗句或任何其他重复的标题。相反,我想使用正则表达式。像这样的东西:

case /\[Verse.*?\]/g: return span.verse + match + span.close; break;

Fiddle

最佳答案

使用包含正则表达式的对象,而不是 switch 语句。

var highlighted = lyrics.replace(/\[.*\]/g, function (match) {

var regex = {
intro: /\[Intro.*?\]/g,
verse: /\[Verse.*?\]/g,
prechorus: /\[Pre-Chorus.*?\]/g,
chorus: /\[Chorus.*?\]/g,
bridge: /\[Bridge.*?\]/g,
outro: /\[Outro.*?\]/g
};

for (var k in regex) {
if (regex.hasOwnProperty(k)) {
if (regex[k].test(match)) {
return span[k] + match + span.close;
}

}
}

});

JSFiddle 示例

http://jsfiddle.net/unwthvns/1/

Switch 语句通常总是可以用 JavaScript 中的对象替换。不需要它们。

关于javascript - 正则表达式作为开关盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com