JS中的正则表达式 - 添加匹配替换

时间:2014-12-13 17:48:49

标签: javascript regex

我无法在任何地方找到解决方案,但我认为这是因为我没有正确的术语。

我有这个:

var text = "Foo:Bar"; // I want -> "Foo: Bar"
text = text.replace(new RegExp("Foo:[a-z]", "ig"), "Foo: ");

我有很多foo个,我想在冒号之后添加一个空格。如果我能告诉冒号后面有一封信,我只想这样做。但是,当我执行上述操作时,我得到:

// -> "Foo: ar"

如何进行[a-z]匹配,并将其放入替换的末尾?

2 个答案:

答案 0 :(得分:2)

您需要的是positive lookahead assertion。你的正则表达式中的[a-z]会占用一个字母,但是一个环顾不会消耗一个字符。 (?=[a-z])这个积极的前瞻断言,匹配(Foo:)后面必须跟一个字母表。因此,只有当后跟字母表时,此正则表达式才会匹配所有Foo:字符串。将匹配的Foo:替换为Foo:<space>将为您提供所需的输出。

text = text.replace(new RegExp("Foo:(?=[a-z])", "ig"), "Foo: ");

OR

text = text.replace(/Foo:(?=[a-z])/ig, "Foo: ");

答案 1 :(得分:1)

您可以使用简单的捕获组,并在替换字符串中将其引用为$1

&#13;
&#13;
var text = "Foo:Bar"; // I want -> "Foo: Bar"
text = text.replace(new RegExp("Foo:([a-z])", "ig"), "Foo: $1");

alert(text);
&#13;
&#13;
&#13;

我也会使用regexp文字表达式而不是contructor:

text = text.replace(/Foo:([a-z])/ig, "Foo: $1");