Regex Capture Character and Replace with another

Viewed 54

Trying to replace the special characters preceded by digits with dot.

const time = "17:34:12:p. m.";

const output = time.replace(/\d+(.)/g, '.');
// Expected Output "17.34.12.p. m."
console.log(output);

I had wrote the regex which will capture any character preceded by digit/s. The output is replacing the digit too with the replacement. Can someone please help me to figure out the issue?

2 Answers

You can use

const time = "17:34:12:p. m.";
const output = time.replace(/(\d)[\W_]/g, '$1.');
console.log(output);

The time.replace(/(\d)[\W_]/g, '$1.') code will match and capture a digit into Group 1 and match any non-word or underscore chars, and the $1. replacement will put the digit back and replace : with ..

If you want to "subtract" whitespace pattern from [\W_], use (?:[^\w\s]|_).

Consider checking more special character patterns in Check for special characters in string.

You should look for non word(\w) and non spaces (\s) characters and replace them with dot.

You should use some live simulator for regular expressions. For example regex101: https://regex101.com/r/xIStHH/1

const time = "17:34:12:p. m.";

const output = time.replace(/[^\w\s]/g, '.');
// Expected Output "17.34.12.p. m."
console.log(output);

Related