我正在尝试做一些非常简单的事情,但我无法以我想要的方式开展工作。我确信它正在做我要求它做的事情,但我没理解语法。
在下面的示例中,我想在geotech和Input之间提取字符串的一部分。
x = "geotechCITYInput"
x.match(/^geotech(.*)(?:Input|List)$/)
结果:
["geotechCITYInput", "CITY"]
我在perl / python甚至是javascript中写了多年的正则表达式,但我从未见过?:语法,我认为这是我应该在这里使用的。
我试图解决的更高级别的问题更复杂。我有一个表单,其中包含许多元素,定义为geotechXXXXInput或geotechXXXXList。我想创建一个XXXX值数组,但仅当名称以Input结尾时才会生成。
示例表单定义:
obj0.name = "geotechCITYInput"
obj1.name = "geotechCITYList"
obj2.name = "geotechSTATEInput"
obj3.name = "geotechSTATEList"
我最终想要一个像这样的数组:
["CITY","STATE"]
我可以通过API调用轻松地遍历表单对象,但我无法弄清楚如何编写正则表达式来匹配我想要的那些。这就是我现在所拥有的,但它不起作用。
geotechForm.forEachItem(function(name) {
if(name.match(/Input$/)
inputFieldNames.push( name.match(/^geotech(.*)Input$/) );
});
任何建议都将不胜感激。
答案 0 :(得分:1)
您的正则表达式中缺少Input
和List
后缀。如果名称以geotech
开头并以Input
或List
结尾,则会匹配,并且它将返回一个数组,其中间的文本作为数组中的第二项。
geotechForm.forEachItem(function (name) {
var match = name.match(/^geotech(.*)(Input|List)$/);
if (match) {
inputFieldNames.push(match[1]);
}
});