我试图匹配以下格式:<任意数量的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;
答案 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";
这将创建一个全局变量。当然最好使用自己的命名空间而不是全局对象。