RegExp获取由冒号分隔的键值对中的文本

时间:2016-05-11 09:02:42

标签: javascript regex

我在这里有我的Regexp示例:https://regex101.com/r/kE9mZ7/1

对于以下字符串:

key_1:一些文字,也许是一个逗号,以分号结尾; key_2:可能没有结尾分号的文本,但可能是

我想做以下事情:

var regEx_attrVal = /[\w :].*?(?=;|$)/g;
var results = attrs.match(regEx_attrVal);
      for(i=0;i<results.length;++i) {
        var split = results[i].split(':');

        preColon = split[0].trim();
        postColon = split[1].trim();

        //log preColon and postColon to console

      }

最终结果应该是:

//results[0]
preColon: key_1
postColon: some text, maybe a comma, ending in a semicolon

//results[1]
preColon: key_2
postColon: text with possibly no ending semicolon, but could be

我的正则表达式肯定是错误的,希望SO社区可以提供帮助!

谢谢!

3 个答案:

答案 0 :(得分:3)

以下是提取这些值的正则表达方式:

/(\w+):\s*([^;]*)/gi

或(标识符应以_或字母开头):

/([_a-z]\w*):\s*([^;]*)/gi

这是regex demo

&#13;
&#13;
var re = /([_a-z]\w*):\s*([^;]*)/gi; 
var str = 'key_1: some text, maybe a comma, ending in a semicolon; key_2: text with no ending semicolon';
while ((m = re.exec(str)) !== null) {
    document.body.innerHTML += m[1] + ": " + m[2] + "<br/>";
}
&#13;
&#13;
&#13;

模式详情

  • ([_a-z]\w*) - 第1组匹配以_开头的标识符或字母,后跟0 +字母数字/下划线符号
  • : - 冒号
  • \s* - 0+ whitespaces
  • ([^;]*) - 除;以外的0 +个字符。使用否定字符类消除了在(?:$|;)组之后使用惰性点匹配的需要。 注意 *量词使值可选。如果需要,请使用+

答案 1 :(得分:1)

您需要添加g修饰符DEMO

如果正则表达式不是强制性的,请尝试

var input = "key_1: some text, maybe a comma, ending in a semicolon; key_2: text with no ending semicolon";
var keyValues = input.split(";");
keyValues.forEach( function(val){
  var keyValue = val.split( ":" );
  alert( "precolon " + keyValue[0] );
  alert( "postcolon " + keyValue[1] );
});

答案 2 :(得分:0)

这个正则表达式应该适合你:

/(\w+):([^;]*)/g

Example here