如何在字符串中的花括号内查找多个值

时间:2016-01-15 06:50:32

标签: javascript

如何使用JavaScript从字符串中查找大括号内的多个值。 E.g。

string = https://test.com/tour/reception/@{name1}/@{name2}/test/@{name3};

我尝试了这个,/@{[A-Za-z0-9À-ÿ_ .-]*}/,但不知道如何匹配这些值。

如何从字符串中获取name1name2name3

4 个答案:

答案 0 :(得分:3)

使用正则表达式匹配花括号包围的文本。您希望使用+?来匹配非贪婪。

var string = "https://test.com/tour/reception/@{name1}/@{name2}/test/@{name3}";
var matches = string.match(/{.+?}/g);

现在matches["{name1}", "{name2}", "{name3}"]

答案 1 :(得分:1)

您可以使用此RegEx。

/{.*?}/g

<强> E.g。

var s = 'https://test.com/tour/reception/@{name1}/@{name2}/test/@{name3};';
var res = s.match(/{.*?}/g);
for (var r in res)
{
  console.log(res[r]);
}

此输出

{name1}
{name2}
{name3}

答案 2 :(得分:0)

如果你想要一个非正则表达式语法(可能为了更清晰):

var str = "https://test.com/tour/reception/@{name1}/@{name2}/test/@{name3}";
var bopen = false;
var valIndex = {
  istart: 0,
  iend: 0
};
values = [];
for (var i = 0 ; i < str.length ; i++) {
  var ch = str.charAt(i);
  if (ch == '{') {
    bopen = true;
    valIndex.istart = i;
}
  if (ch == '}' && bopen == true){
    bopen = false;
    valIndex.iend = i;
    values.push(str.substring(valIndex.istart + 1, valIndex.iend));
  }
}
alert(values);

警报结果是一个字符串数组:name1,name2,name3

这是JSFiddle

答案 3 :(得分:0)

虽然其他答案显示了如何用大括号提取文本,但没有一个真正回答过这个问题。

  

如何从字符串中获取name1name2name3

您可以使用String#indexOfString#substring方法。

&#13;
&#13;
var str = "https://test.com/tour/reception/@{name1}/@{name2}/test/@{name3};";

// Copy the string
var copy = str;
var index,
  matches = []; // To store results

// Till there is string wrapped in curly braces
while ((index = copy.indexOf('{')) !== -1) {
  var closingIndex = copy.indexOf('}');
  matches.push(copy.substring(index + 1, closingIndex));

  // Update the string to remove the first match
  copy = copy.substring(closingIndex + 1);
}

console.log(matches);
document.body.innerHTML = '<pre>' + JSON.stringify(matches, 0, 4) + '</pre>';
&#13;
&#13;
&#13;

使用RegEx

/{([^}]*)}/

带有全球旗帜。

Regex101 Demo

RegEx说明:

  1. {:按字面意思匹配{
  2. ([^}]*):匹配任何次数不是}的内容,并将匹配结果放入第一个捕获的组中。
  3. }:匹配右括号}
  4. g:全球旗帜
  5. Regex Visualization

    在JavaScript中,使用RegExp#exec获取结果。

    &#13;
    &#13;
    var regex = /{([^}]*)}/g;
    
    var str = "https://test.com/tour/reception/@{name1}/@{name2}/test/@{name3};";
    var matches = [];
    
    while (match = regex.exec(str)) {
      // match[1] is the first captured group
      matches.push(match[1]);
    }
    
    console.log(matches);
    document.body.innerHTML = '<pre>' + JSON.stringify(matches, 0, 4) + '</pre>';
    &#13;
    &#13;
    &#13;