Javascript正则表达式匹配有界文本

时间:2016-01-21 00:39:29

标签: javascript regex

我有这样的文字:

....foo..bar....

foo和bar可以是任何文本。

也可能是:

anypreamble....foo..bar....anypostamble

我正在尝试匹配foo而只是bar,但我一直在匹配整个事情。

以下是一些代码:

var s = "this....AAAAAAAAAA..BBBBCD....that";

console.log(s.replace(/\.{4}.+\.{2}(.+)\.{4}/g, 'X'));

我希望上面的内容能给我:thisAAAAAAAAAAX,而不是它给出:thisXthat。

你能帮忙吗?

这是一个小提琴:https://jsfiddle.net/vfkzdg9y/1/

2 个答案:

答案 0 :(得分:1)

如果你想用X分隔两个字符串(foo和bar),你可以使用:

var s = "this....AAAAAAAAAA..BBBBCD....that";

console.log(s.replace(/[^\.]*\.{4}([^\.]+)\.{2}([^\.]+)\.{4}.*/g, '$1X$2'));

产量

  

AAAAAAAAAAXBBBBCD

你也可以使用:

console.log(s.replace(/[^\.]*\.{4}(.+)\.{2}(.+)\.{4}.*/g, '$1X$2'));

哪个收益

  

AAAAAAAAAAXBBBB.CD

为你的第二个例子。

答案 1 :(得分:0)

尝试使用RegExp /(\.{2}\w+)(?=\.{4}\w+$)|\./g匹配两个连续的.字符,后跟字母数字字符,如果后跟四个.个字符,后跟字母数字字符后跟字符串结尾;用空字符串替换.,否则返回"X"以获取捕获的匹配

s.replace(/(\.{2}\w+)(?=\.{4}\w+$)|\./g, function(match) {
  return match === "." ? "" : "X"
})