Alex Polo
Alex Polo

Reputation: 905

Regex in JavaScript

Suppose we don't know how many slashes we could get in a string but we do not want any extra slashes. So if we get this string '/hello/world///////how/are/you//////////////' we should transform it to the form of '/hello/world/how/are/you/'. How to do it with the help of regular expressions in JavaScript?

Upvotes: 0

Views: 129

Answers (4)

cheeku
cheeku

Reputation: 57

I want to make a regex for string which matches from point A till point B

text= "testtttExecuted 'show bootvar' on \n10.238.196.66. kjdkhfkh Executed tsttt\n fhgkhkh"

Output should be

testtttExecuted 'show bootvar' on \n10.238.196.66. kjdkhfkh

I want to make a regex for string which matches from point A till point B

text= "testtttExecuted 'show bootvar' on \n10.238.196.66. kjdkhfkh Executed tsttt\n fhgkhkh"


Output should be

testttt<font color='red'>Executed 'show bootvar' on \n</font>10.238.196.66. kjdkhfkh <font color='red'>Executed tsttt\n</font> fhgkhkh

Upvotes: 0

David Foster
David Foster

Reputation: 3834

'/hello/world///////how/are/you//////////////'.replace(/\/{2,}/g, '/');

This might be an incy wincy bit faster than mkoryak's suggestion, for it will only replace where necessary – i.e., where there's multiple instances of /. I'm sure someone with a better understanding of the nuts and bolts of the JavaScript regular expression engine can weigh in on this one.

UPDATE: I have now profiled mine and mkoryak's solutions using the above string but duplicated hundreds of times, and I can confirm that my solution consistently worked out several milliseconds faster.

Upvotes: 1

jonathanatx
jonathanatx

Reputation: 1613

Edited: mkoryak's answer below is way better. Leaving this in case the info it contains is useful for someone else.

You could capture each word + slash group and look ahead (but don't capture) for one or more extra slash. Like...

(\w+\/)(?:\/)*(\w+\/)(?:\/)*

First () captures one or more of any word character followed by a slash, second () looks for a slash but doesn't capture, * means find 0 or more of the proceeding token. Etc.

Hope that helps!

Upvotes: 0

mkoryak
mkoryak

Reputation: 57988

"/hello/world///////how/are/you//////////////".replace(/\/+/g, "/")

Upvotes: 3

Related Questions