简体   繁体   中英

Replace the matched group with spaces

Here is the contents of the <style> tag of my HTML document:

<style>
        a:link { color: blue; }
  a:link:hover { color: red;  }
</style>

As you see rules are aligned by the opening brace.

Now I need to to remove the :link part from the second rule and keep the alignment in tact.

Here is what I have:

function getStyleAndChangeIt() {
  let style = document.querySelector('style').innerText;
  style = style.replace(/(a)(?::link)(:hover|:focus|:active)/g, '$1$2');
  return style;
}

It doesn't solve the task, of course. It simply removes the :link part without keeping the alignment in tact.

So how to change it so that it will work exactly as I want it? Cheers.

It is actually necessary to replace the :link part with spaces and place these spaces before a , but I don't know how.

edit:

In other words, the desired output is:

   a:link { color: blue; }
  a:hover { color: red;  }

You can add 5 spaces (the length of :link ) before $1 in the substitution argument, and use

 const text = `<style> a:link { color: blue; } a:link:hover { color: red; } </style>`; console.log(text.replace(/(a):link(:(?:hover|focus|active))/g, " $1$2"));

Note you do not need a non-capturing group in (?::link) , it is the same as :link . You only need the group if you intend to use alternation or quantify the group pattern sequence.

All the things I changed are comments in the function.

 function getStyleAndChangeIt() { // I wasn't able to make the snippet without changing the style tag, but you should change it back in your code // I also had to use innerHTML not innerText, because of extra white spaces. That's why the spacing was removed. let style = document.querySelector('pre').innerHTML; style = style.replace(/(a)(?::link)(:hover|:active|:focus)/gm, '$1$2'); // since you know a is meant to be the first letter no need to put it in a group // I also removed the colon in front of the pseudo-classes since they all have it return style; } console.log(getStyleAndChangeIt())
 <pre> a:link { color: blue; } a:link:hover { color: red; } </pre>

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