正则表达式在我的代码中似乎无法正常工作

时间:2015-04-20 09:28:02

标签: javascript regex

我想要做的就是转身,例如" {{John}}"进入" John"。

首先我从字符串解析:

var parametrar = content.match(/[{{]+[Aa-Åå]+[}}]/g);

这里正则表达式工作正常,它应该解析它。我需要解析" {}"在字符串中查找内容。

但是我试图解析" {}"来自每个" parametrar":

for (var i = 0; i < parametrar.length; i++) {
    parametrar = parametrar[i].replace(/[{}]/g, "");
}

当我提醒&#34; parametrar&#34;我得到的只是一个&#34; a&#34;。我不知道我在这里做错了什么,似乎应该有用。

4 个答案:

答案 0 :(得分:1)

尝试使用问号(?)为maque的答案添加贪婪匹配。

"{{John}}".replace(/\{\{(.*?)\}\}/g,"$1");

它提取&#34; John&#34;来自&#34; {{John}}和Martin}}&#34;输入。否则它匹配&#34; John}}和Martin&#34;。

答案 1 :(得分:0)

就这样做:

"{{John}}".replace(/\{\{(.*)\}\}/g,"$1");

因此,您正在搜索具有双重&#39; {&#39; (这些需要被转义),然后有一些东西(。*)然后再次&#39;}&#39;并且您的输出是该块的第一个匹配。

答案 2 :(得分:0)

试试这个:

var parametrar = content.replace(/\{\{([a-åA-Å]+)\}\}/g, "$1");

这会给你一个“纯化的”字符串。如果你想要一个数组,那么你可以这样做:

var parametrar = content.match(/\{\{[a-åA-Å]+\}\}/g);
for (var i = 0, len = parametrar.length; i < len; i++) {
    parametrar = parametrar[i].replace(/\{\{([a-åA-Å]+)\}\}/g, "$1");
}

答案 3 :(得分:0)

您可以将名称与大括号匹配,然后只使用第一个捕获组(m[1]):

&#13;
&#13;
var re = /\{{2}([a-zA-ZÅå]+)\}{2}/g; 
var str = '{{John}}';
 
if ((m = re.exec(str)) !== null) {
  paramterar = m[1];
  alert(paramterar);
}
&#13;
&#13;
&#13;

如果您有一个包含多个{{NAME}}的较大字符串,则可以使用我在评论中建议的代码:

&#13;
&#13;
var re = /\{{2}([a-zA-ZÅå]+)\}{2}/g; 
var str = 'My name is {{John}} and {{Vasya}}.';
var arr = [];

while ((m = re.exec(str)) !== null) {
  paramterar = m[1];
  arr.push(m[1]);
}

alert(arr);
alert(str.replace(/([a-zA-ZÅå])\}{2}/g,"$1").replace(/\{{2}(?=[a-zA-ZÅå])/g, ""))
 
&#13;
&#13;
&#13;

我还修改了字符类,只接受英文字母+ Åå(如果情况不是这样,则会恢复,但请注意[Aa-Åå]不符合任何大写字母从B到Z的英文字母,匹配§等字符。)请检查ANSI table以查看您需要的范围。

相关问题