我有这样的文字:
....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/
答案 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"
})