在node.js服务中,我希望在字符串中执行replace,其中结果字符串取决于原始字符串中的数值。我必须使用string.prototype.replace
并且我必须在一个步骤中执行此操作,这些是给定条件所以请不要问为什么。
var original = "blah/XX/blah"; //XX stands for 00-99
var regexp = new RegExp(/blah\/(d{2})\/blah/, "g");
var alternate = "mama$1/mia";
var result = original.replace(regexp, alternate);
预期结果:
XX == 01 => mama/mia
XX > 01 => mamaXX/mia
我如何做到这一点?
答案 0 :(得分:1)
您可以利用replace
内的回调方法来解析整数,并根据该值指定不同的替换:
var original = "blah/01/blah"; //XX stands for 00-99
var regexp = /blah\/(\d{2})\/blah/g;
var result = original.replace(regexp, function($0, $1) {
return $1 !== "01" ? "mama" + $1 + "/mia" : "mama/mia";
});
console.log(result);
使用/blah\/(\d{2})\/blah/g
我们匹配所有以blah/
开头的子字符串,然后有2位数字和/blah
,然后检查该数字是否超过1
,我们连接{ {1}},数字和"mama"
。如果是"/mia"
或1
,我们只返回0
。
仅供参考:您在正则表达式中输入了拼写错误,"mama/mia"
匹配数字,而不只是\d
。
答案 1 :(得分:1)
您可以使用非捕获组和替换方式执行此操作:>>> js2xml.jsonlike.getall(jstree)
[[{'ordering': True, 'inquiry': True, 'id': '6436', 'name': 'SUMMER 16'}, {'ordering': True, 'inquiry': True, 'id': '6517', 'name': 'FALL 16'}], {'el': 'body', 'terms': 'terms'}]
说明:
var regexp = new RegExp(/blah\/(?:(01)|\d{2})\/blah/, "g");
是非捕获组,因此不会影响(?:...)
。$1
是一个非捕获组,有两个选择。第一个替代方案保存为(?:(...)|...)
。第二个没有分组。$1
是另一种选择。 01|\d{2}
将匹配两者,但正则表达式引擎在第一场比赛时停止。您可以在this fiddle上播放。