条件JavaScript正则表达式

时间:2016-07-20 09:00:19

标签: javascript regex

在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

我如何做到这一点?

2 个答案:

答案 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上播放。