使用正则表达式匹配字符串中的键和值

时间:2011-06-25 16:00:16

标签: javascript regex

我想弄清楚如何匹配此字符串中的模式:

"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的indexOfsubstring函数解决了这个问题,但似乎无法找出使用正则表达式的答案模式。该解决方案适用于所有颜色,包括第一个和最后一个颜色。

4 个答案:

答案 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];
}