javascript - 如何在 JavaScript 中对匹配项执行操作

标签 javascript regex match

我正在尝试使用 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/

相关文章:

javascript - 在 IE 上捕获 HTML 选项元素的鼠标事件

javascript - 退格键和空格键在 Firefox 中不起作用

javascript - 正则表达式仅适用于不以空格分隔的单个单词

regex - 如何编写 Perl 脚本来过滤掉被篡改的数字图片?

javascript - 使用正则表达式提取数字

elasticsearch - 检查数组是否包含 Elasticsearch 中具有特定字段的对象?

python找到两个列表之间的差异

javascript - 使用 jquery 获取具有多个复选框的复选框值之一

javascript - 使用ajax如何在不刷新页面的情况下显示成功后的值

javascript - Polymer Neon-Animation 多重完成监听器