How to remove spaces from a string using JavaScript? - javascript

How to remove spaces in a string? For instance:
Input:
'/var/www/site/Brand new document.docx'
Output:
'/var/www/site/Brandnewdocument.docx'

This?
str = str.replace(/\s/g, '');
Example
var str = '/var/www/site/Brand new document.docx';
document.write( str.replace(/\s/g, '') );
Update: Based on this question, this:
str = str.replace(/\s+/g, '');
is a better solution. It produces the same result, but it does it faster.
The Regex
\s is the regex for "whitespace", and g is the "global" flag, meaning match ALL \s (whitespaces).
A great explanation for + can be found here.
As a side note, you could replace the content between the single quotes to anything you want, so you can replace whitespace with any other string.

var a = b = " /var/www/site/Brand new document.docx ";
console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') );
Two ways of doing this!

SHORTEST and FASTEST: str.replace(/ /g, '');
Benchmark:
Here my results - (2018.07.13) MacOs High Sierra 10.13.3 on Chrome 67.0.3396 (64-bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-bit) ):
SHORT strings
Short string similar to examples from OP question
The fastest solution on all browsers is / /g (regexp1a) - Chrome 17.7M (operation/sec), Safari 10.1M, Firefox 8.8M. The slowest for all browsers was split-join solution. Change to \s or add + or i to regexp slows down processing.
LONG strings
For string about ~3 milion character results are:
regexp1a: Safari 50.14 ops/sec, Firefox 18.57, Chrome 8.95
regexp2b: Safari 38.39, Firefox 19.45, Chrome 9.26
split-join: Firefox 26.41, Safari 23.10, Chrome 7.98,
You can run it on your machine: https://jsperf.com/remove-string-spaces/1

Following #rsplak answer: actually, using split/join way is faster than using regexp. See the performance test case
So
var result = text.split(' ').join('')
operates faster than
var result = text.replace(/\s+/g, '')
On small texts this is not relevant, but for cases when time is important, e.g. in text analisers, especially when interacting with users, that is important.
On the other hand, \s+ handles wider variety of space characters. Among with \n and \t, it also matches \u00a0 character, and that is what is turned in, when getting text using textDomNode.nodeValue.
So I think that conclusion in here can be made as follows: if you only need to replace spaces ' ', use split/join. If there can be different symbols of symbol class - use replace(/\s+/g, '')

easy way
someString.replace(/ /g, '');
// or
someString.replace(/\s/gm, '');

You also use one of the latest string methods of JS: replaceAll
'/var/www/site/Brand new document.docx'.replaceAll(' ', '');

var input = '/var/www/site/Brand new document.docx';
//remove space
input = input.replace(/\s/g, '');
//make string lower
input = input.toLowerCase();
alert(input);
Click here for working example

Without regexp, it works fine for only one occurrence.
input = input.replace(' ', '');
This is faster as simple !
Could help some of you in some cases.

var output = '/var/www/site/Brand new document.docx'.replace(/ /g, "");
or
var output = '/var/www/site/Brand new document.docx'.replace(/ /gi,"");
Note: Though you use 'g' or 'gi' for removing spaces both behaves the same.
If we use 'g' in the replace function, it will check for the exact match. but if we use 'gi', it ignores the case sensitivity.
for reference click here.

You can use regex to remove spaces from string`
let str = '/var/www/site/Brand new document.docx';
let result = str.replace(/\s/g, '');

Regex + Replace()
Although regex can be slower, in many use cases the developer is only manipulating a few strings at once so considering speed is irrelevant. Even though / / is faster than /\s/, having the '\s' explains what is going on to another developer perhaps more clearly.
let string = '/var/www/site/Brand new document.docx';
let path = string.replace(/\s/g, '');
// path => '/var/www/site/Brandnewdocument.docx'
Split() + Join()
Using Split + Join allows for further chained manipulation of the string.
let string = '/var/www/site/Brand new document.docx';
let path => string.split('').map(char => /(\s|\.)/.test(char) ? '/' : char).join('');
// "/var/www/site/Brand/new/document/docx";

Using replaceAll seems like the simplest cleanest way. (I can't vouch for fastest)
'/var/www/site/Brand new document.docx'.replaceAll(' ', '')
See docs.
The replaceAll() method returns a new string with all matches of a pattern replaced by a replacement. The pattern can be a string or a RegExp, and the replacement can be a string or a function to be called for each match.

Easiest way to remove spaces from the string is use replace in this way
let str = '/var/www/site/Brand new document.docx';
let result = str.replace(/\s/g, '');

var str = '/var/www/site/Brand new document.docx';
document.write( str.replace(/\s\/g, '') );
----------

your_string = 'Hello world';
words_array = your_tring.split(' ');
string_without_space = '';
for(i=0; i<words_array.length; i++){
new_text += words_array[i];
}
console.log("The new word:" new_text);
The output:
HelloWorld

Related

replace – with - using replace()

I have been using
var str = "Artist - Song";
str = str.replace("-", "feat");
to change some texts to "-".
Recently, I've noticed another "–" that the above code fails to replace.
This "–" seems a bit longer than the normal "-".
Is there any way to replace the longer one with the shorter "-"?
Any help is appreciated. Thanks
EDIT.
This is how the rest of the code is written.
var befComma = str.substr(0, str.indexOf('-'));
befComma.trim();
var afterhyp = str.substr(str.indexOf("-") + 1);
var changefeat = befComma.toUpperCase();
This "–" seems a bit longer than the normal "-".
Is there any way to replace the longer one with the shorter "-"?
Sure, you just do the same thing:
str = str.replace("–", "-");
Note that in both cases, you'll only replace the first match. If you want to replace all matches, see this question's answers, which point you at regular expressions with the g flag:
str = str.replace(/-/g, "feat");
str = str.replace(/–/g, "-");
I'm not quite sure why you'd want to replace the longer one with the shorter one, though; don't you want to replace both with feat?
If so, this replaces the first:
str = str.replace(/[-–]/, "feat");
And this replaces all:
str = str.replace(/[-–]/g, "feat");
Give this a shot:
var str = "Artist – Song";
str = str.replace("–", "-"); // Add in this function
str = str.replace("-", "feat");
This should replace the slightly longer "–" with the shorter more standard "-".

JavaScript - strip everything before and including a character

I am relatively new to RegEx and am trying to achieve something which I think may be quite simple for someone more experienced than I.
I would like to construct a snippet in JavaScript which will take an input and strip anything before and including a specific character - in this case, an underscore.
Thus 0_test, 1_anotherTest, 2_someOtherTest would become test, anotherTest and someOtherTest, respectively.
Thanks in advance!
You can use the following regex (which can only be great if your special character is not known, see Alex's solution for just _):
^[^_]*_
Explanation:
^ - Beginning of a string
[^_]* - Any number of characters other than _
_ - Underscore
And replace with empty string.
var re = /^[^_]*_/;
var str = '1_anotherTest';
var subst = '';
document.getElementById("res").innerHTML = result = str.replace(re, subst);
<div id="res"/>
If you have to match before a digit, and you do not know which digit it can be, then the regex way is better (with the /^[^0-9]*[0-9]/ or /^\D*\d/ regex).
Simply read from its position to the end:
var str = "2_someOtherTest";
var res = str.substr(str.indexOf('_') + 1);

jQuery: How to trim new line and tab characters between words

Hi I am getting new line(\n) and tab(\t) characters between words and I was trying to trim those by using $.trim() function but its not working. So can anyone have some solution for this type of problem.
Ex:
var str = "Welcome\n\tTo\n\nBeautiful\t\t\t\nWorld";
alert($.trim(str));
the above code is not working.
str.replace(/\s+/g, " "); //try this
reference replace
\s matches any newline or tab or white-space
You can do this:
var str = "Welcome\n\tTo\n\nBeautiful\t\t\t\nWorld";
alert($.trim(str.replace(/[\t\n]+/g,' ')));
// results is "Welcome To Beautiful World"
That is expected. trim only takes care of leading and trailing whitespace.
Instead, use
str.split(/\s/).join(' ');
In your example, this returns
"Welcome To Beautiful World"
You can use replace with a regular expression :
var str = "Welcome\n\tTo\n\nBeautiful\t\t\t\nWorld";
alert($.trim(str.replace(/[\t\n]+/g, ' ')));
Demo

Regex to extract all digits after last occurrence of a special character

I want to extract all digits after last occurrence of character "-" so for example 311-1974-8 should return me 8 and 311-1974-348 should return 348
edit:
Added clarification from a comment:
actually it's an external tool which provides it's own inbuild functionalists and i have no other option but to use regex to extract this. No JS can be applied :(
This captures the last number.
var str = '311-1974-348';
var matches = str.match(/-(\d+)$/);
var match = matches ? matches[1] : null;
console.log("matched? " + match);
Try matching on /[^-]+$/, e.g.:
var s = '311-1974-348';
s.match(/[^-]+$/); // => ["348"]
You mentioned in a comment it's for an external tool so...
-([0-9]+)$
dunno how your tool handles captured groups or anything...
Why not simply spliting ?
var str = input.split('-').pop();
Try this /[0-9]+$/. It worked on both the inputs you provided.

Searching for a last word in JavaScript

I am doing some logic for the last word that is on the sentence. Words are separated by either space or with a '-' character.
What is easiest way to get it?
Edit
I could do it by traversing backwards from the end of the sentence, but I would like to find better way
Try splitting on a regex that matches spaces or hyphens and taking the last element:
var lastWord = function(o) {
return (""+o).replace(/[\s-]+$/,'').split(/[\s-]/).pop();
};
lastWord('This is a test.'); // => 'test.'
lastWord('Here is something to-do.'); // => 'do.'
As #alex points out, it's worth trimming any trailing whitespace or hyphens. Ensuring the argument is a string is a good idea too.
Using a regex:
/.*[\s-](\S+)/.exec(str)[1];
that also ignores white-space at the end
Have you tried the lastIndexOf function http://www.w3schools.com/jsref/jsref_lastIndexOf.asp
Or Split function http://www.w3schools.com/jsref/jsref_split.asp
Here is a similar discussion have a look
You can try something like this...
<script type="text/javascript">
var txt = "This is the sample sentence";
spl = txt.split(" ");
for(i = 0; i < spl.length; i++){
document.write("<br /> Element " + i + " = " + spl[i]);
}
</script>
Well, using Split Function
string lastWord = input.Split(' ').Last();
or
string[] parts = input.Split(' ');
string lastWord = parts[parts.Length - 1];
While this would work for this string, it might not work for a slightly different string, so either you'll have to figure out how to change the code accordingly, or post all the rules.
string input = ".... ,API";
here, the comma would be part of the "word".
Also, if the first method of obtaining the word is correct, ie. everything after the last space, and your string adheres to the following rules:
Will always contain at least one space
Does not end with one or more space (in case of this you can trim it)
then you can use this code that will allocate fewer objects on the heap for GC to worry about later:
string lastWord = input.Substring(input.LastIndexOf(' ') + 1);
I hope its help

Categories