如何使用JavaScript从字符串中查找大括号内的多个值。 E.g。
string = https://test.com/tour/reception/@{name1}/@{name2}/test/@{name3};
我尝试了这个,/@{[A-Za-z0-9À-ÿ_ .-]*}/
,但不知道如何匹配这些值。
如何从字符串中获取name1
,name2
和name3
?
答案 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)
虽然其他答案显示了如何用大括号提取文本,但没有一个真正回答过这个问题。
如何从字符串中获取
name1
,name2
和name3
?
您可以使用String#indexOf
和String#substring
方法。
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;
使用RegEx
/{([^}]*)}/
带有全球旗帜。
RegEx说明:
{
:按字面意思匹配{
([^}]*)
:匹配任何次数不是}
的内容,并将匹配结果放入第一个捕获的组中。}
:匹配右括号}
g
:全球旗帜在JavaScript中,使用RegExp#exec
获取结果。
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;