简体   繁体   中英

gsub same pattern from a string

I have big problems with figuring out how regex works. I want this text:

This is an example\\e[213] text\\e[123] for demonstration

to become this:

This is an example text for demonstration.

So this means that I want to remove all strings that begin with \\e[ and end with ] I just cant find a proper regex for this. My current regex looks like this:

/.*?(\\e\[.*\])?.*/ig

But it dont work. I appreciate every help.

You only need to do this:

txt.gsub(/\\e\[[^\]]*\]/i, "")

There is no need to match what is before or after with .*

The second problem is that you use .* to describe the content between brackets. Since the * quantifier is by default greedy, it will match all until the last closing bracket in the same line.

To prevent this behaviour a way is to use a negated character class in place of the dot that excludes the closing square brackets [^\\]] . In this way you keep the advantage of using a greedy quantifier.

gsub can do the global matching for you.

re = /\\e\[.+?\]/i
'This is an example\e[213] text\e[123] for demonstration'.gsub re, ''
=> "This is an example text for demonstration"   

You can make the search less greedy by using .+? in the regex

puts 'This is an example\e[213] text\e[123] for demonstration'.gsub(/\\e\[.+?\]/, '')  
This is an example text for demonstration  
=> nil

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM