如何在javascript中对匹配执行操作
我试图使用javascript(纯js,而不是jquery或库)通过正则表达式匹配项并对其执行操作 基本上,我试图创建一个脚本,将英制度量转换为公制。这是我的如何在javascript中对匹配执行操作,javascript,regex,match,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 &
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;
}
我想把它和正则表达式按照
/(([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...
}
多亏了Regex对象的属性,您将循环遍历字符串并最终返回null。您可以这样做。听起来您想使用javascript替换函数的“回调”功能,类似于:
t.replace(m[i],function(match, contents, offset, fullstring){
return (decimal * a[j][1]) + a[j][2] + m[i][2])
});
现在有了这个匿名函数,您就有能力对匹配的组进行更精确的操作
如果这没有帮助,您是否知道“$1-9”构造?e、 g
t.replace(/(([0-9\/]+) ((wholemeal |plain |white |strong |self-raising )?flour))/ig,'$1');
这将仅用第一个括号内的组(xxx)中的内容替换每个组。然而,这些在PHP中也是标准的。您可以进一步对“$1”字符串执行所需的操作
我希望这会有帮助如果我遗漏了要点,请评论以澄清您是否需要。您不能使用
match
函数和全局正则表达式访问组。在这种情况下,您可以使用exec
而不是match
,也可以不使用g
将文本拆分成几行,并在每一行上使用match
(我选择第二种方法,但这取决于您的输入是如何组织的)
如果不使用全局正则表达式,则可以使用m[1]、m[2]等访问组。
以下是一些可以帮助您开始的工作代码:
var a=[
[/([0-9\/]+)(杯)?(全麦|普通|白|浓|自养)?(面粉)/i,45,“g”,
];
函数转换(){
var t=document.getElementById(“输入”).innerHTML;
对于(var j=0;j
t.replace(/(([0-9\/]+) ((wholemeal |plain |white |strong |self-raising )?flour))/ig,'$1');
var a = [
[/([0-9\/]+) (cup )?(wholemeal|plain|white|strong|self-raising)? (flour)/i, 45, "g"],
];
function convert(){
var t = document.getElementById("input").innerHTML;
for(var j = 0; j < a.length; j++){
var m = t.match(a[j][0]);
var decimal = eval(m[0].split(' ')[0]);
t = (decimal * a[j][1]) + " " + a[j][2] + " " + m[3] + " " + m[4];
}
document.getElementById("output").innerHTML = t;
}