Reputation: 267077
I'm trying to use this code to replace spaces with _, it works for the first space in the string but all the other instances of spaces remain unchanged. Anybody know why?
function updateKey()
{
var key=$("#title").val();
key=key.replace(" ","_");
$("#url_key").val(key);
}
Upvotes: 474
Views: 725485
Reputation: 396
Just using replace
:
var text = 'Hello World';
new_text = text.replaceAll(' ', '_');
console.log(new_text);
Upvotes: 4
Reputation: 3361
This is happening because replace()
method is designed this way to replace only the first occurance when you use string to find the match. Check the replace method.
To replace all matches you can use the following 3 methods:
replace()
method:When you use the replace
method with regex with /g
flag it replaces all the matching occurrences in a string.
function updateKey()
{
var key=$("#title").val();
key=key.replace(/ /g,"_");
$("#url_key").val(key);
}
// Show case
let title = "Your document title";
console.log(title.replace(/ /g,"_"));
The replaceAll
method will remove all spaces with an underscore. (must use the global flag with it
when using regex)
function updateKey()
{
var key=$("#title").val();
key=key.replaceAll(/ /g,"_");
// key=key.replaceAll(" ","_"); also valid
$("#url_key").val(key);
}
// Show case
let title = "Your document title";
console.log(title.replaceAll(/ /g,"_"));
split
and join
method:Split your string at spaces and join it by using _ as a separator in the join method.
function updateKey()
{
var key=$("#title").val();
key=key.split(" ").join("_");
$("#url_key").val(key);
}
// Show case
let title = "Your document title";
console.log(title.split(" ").join("_"));
Upvotes: 9
Reputation: 9
$(function() {
$('#title').keyup(function() {
var value = $(this).val().toLowerCase();
$('#url_key').val(value.split(' ').join('_'));
}).keyup();
});
-- or you can use:
$(function() {
$('#title').keyup(function() {
var value = $(this).val().toLowerCase();
$('#url_key').val(value.replace(/ /g,"_"));
}).keyup();
});
Upvotes: 0
Reputation: 51
const updateKey = key => console.log(key.split(' ').join('_'));
updateKey('Hello World');
Upvotes: 1
Reputation: 92745
You can try this
var str = 'hello world !!';
str = str.replace(/\s+/g, '-');
It will even replace multiple spaces with single '-'.
Upvotes: 57
Reputation: 10037
Replace spaces with underscore
var str = 'How are you';
var replaced = str.split(' ').join('_');
Output: How_are_you
Upvotes: 22
Reputation: 427
I know this is old but I didn't see anyone mention extending the String prototype
.
String.prototype.replaceAll = function(search, replace){
if(!search || !replace){return this;} //if search entry or replace entry empty return the string
return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};
Upvotes: 3
Reputation: 36806
To answer Prasanna's question below:
How do you replace multiple spaces by single space in Javascript ?
You would use the same function replace
with a different regular expression. The expression for whitespace is \s
and the expression for "1 or more times" is +
the plus sign, so you'd just replace Adam's answer with the following:
key=key.replace(/\s+/g,"_");
Upvotes: 75
Reputation: 2115
I created JS performance test for it http://jsperf.com/split-and-join-vs-replace2
Upvotes: 19
Reputation: 116980
Try .replace(/ /g,"_");
Edit: or .split(' ').join('_')
if you have an aversion to REs
Edit: John Resig said:
If you're searching and replacing through a string with a static search and a static replace it's faster to perform the action with .split("match").join("replace") - which seems counter-intuitive but it manages to work that way in most modern browsers. (There are changes going in place to grossly improve the performance of .replace(/match/g, "replace") in the next version of Firefox - so the previous statement won't be the case for long.)
Upvotes: 913
Reputation: 7900
try this:
key=key.replace(/ /g,"_");
that'll do a global find/replace
Upvotes: 99