我正在尝试使用 javascript(普通 js,而不是 jquery 或库)通过正则表达式匹配项目并对它们执行操作。
基本上,我正在尝试创建一个从英制测量转换为公制的脚本。这是我所拥有的
var a = [
[/([0-9\/]+) (pound[s]?|lb)/ig, 45, "g"],
];
function convert(){
var t = document.body.innerHTML;
for(var j = 0; j < a.length; j++){
var m = t.match(a[j][0]);
for(var i = 0; i < 1; i++){
var decimal = eval(m[i].split(' ')[0]);
t = t.replace(m[i],(decimal * a[j][1]) + a[j][2]);
}
}
document.body.innerHTML = t;
}
这可行,但对于某些比赛我想返回比赛的一部分。例如,一杯糖与一杯面粉有一个转换,但每种转换都有多种类型,所以我想返回原始字符串的一部分。
如果我有
1 cup wholemeal flour
我想将其与正则表达式匹配
/(([0-9\/]+) ((wholemeal |plain |white |strong |self-raising )?flour))/ig
...仅对第一部分进行操作,并将整个部分替换为包含标记的字符串,例如
//match value * conversion + unit + string token
t - t.replace(m[i], (decimal * a[j][1]) + a[j][2] + m[i][2]);
最后出现
150g wholemeal flour
但是,m[i] 是一个字符串,我找不到像在 php 或 c# 中那样访问比赛中的组的方法
注意: 我意识到其中几种类型的面粉需要单独转换,但我仍然想知道如何做到这一点。
最佳答案
由于“g”修饰符,您无法访问您的组(仍然不知道为什么您不能,而 JavaScript 完全支持嵌套结构......)。
要达到相同的效果,您可以通过 Regex#exec 方法循环遍历字符串。因此,不要这样做:
myString.match(myRegex);
其中 myRegex 具有“g”修饰符。你可以这样做:
var match;
while(match = myRegex.exec(myString)) {
// do stuff here...
}
感谢lastIndex Regex 对象的属性,您将循环遍历字符串并最终返回 null。
关于javascript - 如何在 JavaScript 中对匹配项执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15866709/