1

我试图匹配以下格式:<任意数量的 az AZ 字符>

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

代码是:

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

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

似乎无法让它工作..我哪里出错了?

同样,一旦我得到匹配的字符串,我想减去 <> 输出的内容并使用它来引用变量。

var vacba = 0 

例如

然后到vacba = 10;

4

3 回答 3

4

您的正则表达式是字符串,而不是正则表达式。尝试:

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

如果由于某种原因您需要使用通过 转换为正则表达式的字符串,则match必须转义斜杠:

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

回应您的编辑,提出更多要求

使用带括号的匹配组:

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

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

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

于 2012-08-28T13:23:16.433 回答
3

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

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

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

var predefinedListRegEx = /^<\w*>$/;
于 2012-08-28T13:27:16.640 回答
1

使用以下正则表达式:

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

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

现在您可以使用如下[]符号将其用作变量名:

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

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

于 2012-08-28T13:35:06.973 回答