Reputation: 2117
How can I apply multiple regexs to a single string?
For instance, a user inputs the following into a text area:
red bird
blue cat
black dog
and I want to replace each carriage return with a comma and each space with an underscore so the final string reads as red_bird,blue_cat,black_dog.
I've tried variations in syntax along the lines of the following so far:
function formatTextArea() {
var textString = document.getElementById('userinput').value;
var formatText = textString.replace(
new RegExp( "\\n", "g" ),",",
new RegExp( "\\s", "g"),"_");
alert(formatText);
}
Upvotes: 7
Views: 5935
Reputation: 122906
You can chain the replacements. Every application of the replace method retuns a string, so on that string you can apply replace again. Like:
function formatTextArea() {
var textString = document.getElementById('userinput').value;
var formatText =
textString.replace(/\n/g,",")
.replace(/\s/g,"_");
alert(formatText);
}
There's no need for all these new Regular Expression Objects by the way. Use Regular Expression literals (like /\n/g
in the above).
Alternatively you can use a lambda for the replacement
const str = `red bird
blue cat
black dog`;
console.log(str.replace(/[\n\s]/g, a => /\n/.test(a) ? "," : "_"));
Upvotes: 7
Reputation: 344565
As others have mentioned, chaining is good enough for something as simple as what you're asking. However, if you want this to be more dynamic, you can use a replacer function as the second argument:
function formatTextArea() {
var textString = document.getElementById('userinput').value;
var formatText = textString.replace(/\n|\s/g, function ($0) {
if ($0 === "\n")
return ",";
else if ($0 === " ")
return "_";
}
alert(formatText);
}
Using a replacer function will allow you to be dynamic without having to chain together calls to replace()
. It may also be marginally faster (regex parser is invoked only once). Be aware that \s
will match more than just the space character, though :-) For the purposes of your question, this would be good enough:
var formatText = textString.replace(/\n|\s/g, function ($0) {
return $0 == "\n" ? "," : "_";
}
Upvotes: 3
Reputation: 41050
Include http://phpjs.org/functions/str_replace:527 and then
input = str_replace("\\n", ',', input);
input = str_replace(' ', '_', input);
Upvotes: -3
Reputation: 2958
var textString = "red blue\nhack bye\ntest rt\n";
var formatText = textString.replace(new RegExp( "\\n", "g" ),",").replace(new RegExp( "\\s", "g"),"_");
alert(formatText);
Upvotes: 0
Reputation: 97571
Regexp object have their own literal notation, using forward slashes, meaning that backslashes don't have to be escaped. For example, /\n/g
is equivalent to new RegExp('\\n','g')
.
function formatTextArea()
{
var textString = document.getElementById('userinput').value;
textString = textString.replace(/\n/g,",").replace(/\s/g,"_");
alert(textString);
}
Upvotes: 1