How to replace everything but a specified string using regex

ぃ、小莉子 提交于 2021-02-04 17:46:18

问题


I've been looking through and out of stackoverflow for this, but I haven't had any luck.

The string I want to work with is "xbananay", where 'x' and 'y' can be any random combination of letters or numbers with any length. So my string could simply be "qrstbananag", but it could also be "abcbanana12345" for example.

I want to use, and only use, javascript's replace function to replace everything BUT "banana". I already have some regex that can find banana, but the replace function, as intended, will replace what I am looking for, when I want to find everything else. Example:

var fullString = "qrstbananag"
var strippedBanana = fullString.replace(/(?:banana)/g, ''); //returns qrstg

I also have a regex expression that ALMOST gets me what I am looking for, but includes all characters in the string "banana". Another example:

var fullString2 = "abcbanana12345"
var strippedBanana = fullString2.replace(/[^(?:banana)]/g, ''); //returns abbanana

How might I accomplish this using only the replace function? Thanks in advance.


回答1:


You could use this:

var test = 'abcbananadefbananaghi';

var result = test.replace(/(banana)|[^]/g, '$1');

console.log(result);

The thing is to match banana and put it back in the result with $1. When banana doesn't match, the next character ([^], which also matches newlines) is not captured in a capture group, and so does not get included in the $1.

Instead of [^] you can also use [\S\s]: same behaviour.

About classes

In your second attempt you used

[^(?:banana)]

But be aware that the characters in a class (between [...]) are treated more literally than they would otherwise. So (?: is treated as three separate characters, and so are the characters of banana. You are in fact saying: remove any character that is not any of these: ()?:abn.



来源:https://stackoverflow.com/questions/38132407/how-to-replace-everything-but-a-specified-string-using-regex

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!