问题
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