我想弄清楚如何匹配此字符串中的模式:
"Red|1|White|7|Blue|27|Green|56"
如您所见,数字可以是1或2位数字(绝不是其他任何东西)。
所以,如果我有这样的功能:
function GetColorNumber(sColorName){
var sSearchStr="Red|1|White|7|Blue|27|Green|56";
var sColorNum;
var sPattern;
...
return sColorNum;
}
如何在此函数中使用正则表达式返回sColorNum(给定sColorName)?
我已经使用Javascript的indexOf
和substring
函数解决了这个问题,但似乎无法找出使用正则表达式的答案模式。该解决方案适用于所有颜色,包括第一个和最后一个颜色。
答案 0 :(得分:1)
将字符串更改为
var colors ={Red:1,White:7,Blue:27,Green:56}
然后你可以返回
colors[sColorName]
没有regEx我会做
var iColorNum = parseInt(sSearchStr.split(sColorName+"|")[1],10)
答案 1 :(得分:1)
将字符串拆分为|
:
function GetColorNumber(sColorName){
var sSearchStr="Red|1|White|7|Blue|27|Green|56";
var parts = sSearchStr.split('|');
var key = parts.indexOf(sColorName);
return parts[key+1];
}
答案 2 :(得分:1)
使用正则表达式,它可能如下所示:
function GetColorNumber(sColorName){
var sSearchStr="Red|1|White|7|Blue|27|Green|56";
var match = RegExp(sColorName + "\\|(\\d+)").exec(sSearchStr);
return match[1];
}
请注意,如果用户传入的字符串包含正则表达式中具有特殊含义的字符,则无法正常工作。
答案 3 :(得分:0)
请参阅this post:
var str="Red|1|White|7|Blue|27|Green|56";
var sColorName = "Red";
var pat = sColorName + '\\|(\\d{1,2})\\|?';
var re = new RegExp(pat ,"g");
match = re.exec(str);
//match[0] is the full match, match[1] is the color code
document.write(match[1]);
或以较短的方式:
function getColor(colorName, str){
return (new RegExp(colorName + '\\|(\\d{1,2})\\|?' ,"g")).exec(str)[1];
}