正则表达式匹配失败

时间:2012-08-28 13:21:18

标签: javascript regex string variables pattern-matching

我试图匹配以下格式:<任意数量的a-z A-Z字符>

使用"^<\w*>$";

代码是:

var predefinedListRegEx = "^<\w*>$";
var dataFill = "<aaaa>"; 
var predefined_List = dataFill.match(predefinedListRegEx);

if (predefined_List != null) {
        //MATCHES THE CONDITION
    }

似乎无法让它发挥作用..我哪里出错?

一旦我得到匹配的字符串,我想减去什么是&lt;&gt;出 并用它来引用变量。

var vacba = 0 

例如

然后到vacba = 10;

3 个答案:

答案 0 :(得分:4)

这里的正则表达式是String,而不是RegExp。尝试:

var predefinedListRegEx = /^<\w*>$/;

如果由于某种原因你需要使用由match强制转换为正则表达式的字符串,你必须逃避斜线:

var predefinedListRegEx = "^<\\w*>$";

响应您的更多请求编辑

使用带括号的匹配组:

var predefinedListRegEx = /^<(\w*)>$/;
var dataFill = "<aaaa>"; 
var predefined_List = dataFill.match(predefinedListRegEx);

这会将predefinedListRegEx设置为如下数组:["<aaaa>", "aaaa"]

如果您想将predefined_List[1]中的字符串用作变量名称(例如,要aaaa = 10),则可能不需要使用eval。如果变量是全局变量,则可以简单地使用window[predefined_List[1]],因为所有全局变量都是window对象的属性。如果它不是全局的(或者你只是想成为一个整洁的JavaScript程序员而不是过度使用全局命名空间),那么你最好只使用包含variablesNamedInMyRegexes[predefined_List[1]] = 10;之类值的对象的引用属性。

答案 1 :(得分:3)

您使用字符串作为regexp数据的容器。当您在匹配中使用时,它将隐式转换为真正的正则表达式,但您需要正确引用在字符串文字中具有特殊含义的符号 - 在本例中为\

var predefinedListRegEx = "^<\\w*>$";

此外,每次调用的隐式转换都会降低性能,因此您应该使用真正的构造函数,如apsillers所述:

var predefinedListRegEx = /^<\w*>$/;

答案 2 :(得分:1)

使用以下正则表达式:

result = dataFill.match(/<(\w*)>/);

这将返回匹配和捕获组的内容作为第二个值。

现在,您可以使用[]表示法将其用作变量名称,如下所示:

window[result[1]] = "whatever";

这将创建一个全局变量。当然最好使用自己的命名空间而不是全局对象。