find text in string and replace it - javascript

I have a variable which contains a string expression. This expression have the pattern:
propery_expression operator value
proeprty_expression can look like:
World
World/Name
City/Name
I want to find text after /, and If it exists, and replace with custom text. How can I do this?

With a regex, for example this one :
yourString.replace(/\/\S+/, '/the new stuff...');
In the console :
> var cityName = 'Djakarta';
> var line = 'World/Name Something SomethingElse';
> line.replace(/\/\S+/, '/' + cityName);
"World/Djakarta Something SomethingElse"
You can use this to do complex search and replace operations. Details on Mozilla's documentation

You could try this
var the_string = "City/Name";
var word = "New";
var result = the_string.substring(0, the_string.lastIndexOf('/') + 1);
alert(result + word);

You can try this:
var str = 'World';
alert(rep(str));
function rep(str)
{
if(str.indexOf('/')>-1)//present
{
alert(str.substring(str.lastIndexOf('/') + 1,str.length));
var res = str.replace(str.substring(str.lastIndexOf('/') + 1,str.length),'custom_word');
return res;
}
else{
alert(' / not present');
return str;
}
}
DEMO
Note: If text present after / then it replace it with "custom_word".

In addition to Mathias's answer, you could use RegEx together with a function, like so:
var myString;
.
.
.
myString.replace(/\/(\S+)/g, function (found, value) {
// found == "City/NewYork"
// value == "NewYork"
return found + "Altered";
}
This, for example, will change every "x/y" with "x/yAltered"

Related

Regular expression not capturing multiple characters [duplicate]

I have a string in JavaScript (e.g., #box2), and I just want the 2 from it.
I tried:
var thestring = $(this).attr('href');
var thenum = thestring.replace(/(^.+)(\w\d+\w)(.+$)/i, '$2');
alert(thenum);
It still returns #box2 in the alert. How can I get it to work?
It needs to accommodate for any length number attached on the end.
For this specific example,
var thenum = thestring.replace(/^\D+/g, ''); // Replace all leading non-digits with nothing
In the general case:
thenum = "foo3bar5".match(/\d+/)[0] // "3"
Here's a bonus: regex generator.
function getre(str, num) {
if(str === num)
return 'nice try';
var res = [/^\D+/g,/\D+$/g,/^\D+|\D+$/g,/\D+/g,/\D.*/g, /.*\D/g,/^\D+|\D.*$/g,/.*\D(?=\d)|\D+$/g];
for(var i = 0; i < res.length; i++)
if(str.replace(res[i], '') === num)
return 'num = str.replace(/' + res[i].source + '/g, "")';
return 'no idea';
};
function update() {
$ = function(x) { return document.getElementById(x) };
var re = getre($('str').value, $('num').value);
$('re').innerHTML = 'Numex speaks: <code>' + re + '</code>';
}
<p>Hi, I'm Numex, the Number Extractor Oracle.
<p>What is your string? <input id="str" value="42abc"></p>
<p>What number do you want to extract? <input id="num" value="42"></p>
<p><button onclick="update()">Insert Coin</button></p>
<p id="re"></p>
You should try the following:
var txt = "#div-name-1234-characteristic:561613213213";
var numb = txt.match(/\d/g);
numb = numb.join("");
alert (numb);​
Result
1234561613213213
I think this regular expression will serve your purpose:
var num = txt.replace(/[^0-9]/g, '');
Where txt is your string.
It basically rips off anything that is not a digit.
I think you can achieve the same thing by using this as well:
var num = txt.replace(/\D/g, '');
Try the following: string.replace(/[^0-9]/g, ''); This will delete all non-digit characters, leaving only digits in the string
function retnum(str) {
var num = str.replace(/[^0-9]/g, '');
return parseInt(num,10);
}
console.log('abca12bc45qw'.replace(/[^0-9]/g, ''));
console.log('#box2'.replace(/[^0-9]/g, ''));
Using the match function.
var thenum = "0a1bbb2".match(/\d+$/)[0];
console.log(thenum);
And this is a snippet which extracts prices with currency and formatting:
var price = "£1,739.12";
parseFloat(price.replace(/[^\d\.]*/g, '')); // 1739.12
I tried all the combinations cited in the previous answer with this code and got it working. It was the only one that worked on that string → (12) 3456-7890
var str = "(12) 3456-7890";
str.replace(/\D+/g, '');
Result: "1234567890"
Obs: I know that a string like that will not be on the attribute, but whatever, the solution is better, because it’s more complete.
You may use the great parseInt() method.
It will convert the leading digits to a number:
parseInt("-10px");
// Will give you -10
You can extract numbers from a string using a regex expression:
let string = "xxfdx25y93.34xxd73";
let res = string.replace(/\D/g, "");
console.log(res);
Output: 25933473
Wrap it into a vanilla JavaScript function:
function onlyNumbers(text){
return text.replace(/\D/g, "");
}
For a string such as #box2, this should work:
var thenum = thestring.replace(/^.*?(\d+).*/,'$1');
jsFiddle:
http://jsfiddle.net/dmeku/
function justNumbers(string)
{
var numsStr = string.replace(/[^0-9]/g, '');
return parseInt(numsStr);
}
console.log(justNumbers('abcdefg12hijklmnop'));
You can do a function like this
function justNumbers(string)
{
var numsStr = string.replace(/[^0-9]/g, '');
return parseInt(numsStr);
}
Remember: if the number has a zero in front of it, the int won’t have it
If you want to parse a number from a price like $6,694.20, it can be done this way:
parseFloat('$6,694.20'.replace(/^\D|,+/g, ''))
Or via a function:
function parsePrice(value) {
return parseFloat(value.replace(/^\D|,+/g, ''))
}
parsePrice('$6,694.20') // 6694.2
To return an int from the string, you can do the following code. It removes all not number characters and returns an integer.
Number("strin[g]3".replace(/\D+/g, ""))
You can use a regular expression.
var txt="some text 2";
var numb = txt.match(/\d/g);
alert (numb);
That will alert 2.
let str = "Total Work Duration: 189.56 Hrs.Present: 23.5 Absent: 2";
/* The provided regex globally matches the character
"." and a digit from the string */
let numArr = str.match(/[\d\.]+/g)
/* It returns an array [189.56, ., 23.5, 2], and
uses the filter function to remove the '.' */
numArr = numArr.filter(n => n != '.')
console.log(numArr)
If someone need to preserve dots in extracted numbers:
var some = '65,87 EUR';
var number = some.replace(",",".").replace(/[^0-9&.]/g,'');
console.log(number); // returns 65.87
You can use Underscore.js' string library as follows:
var common = "#box"
var href = "#box1"
_(href).strRight(common)
The result will be: 1
See: Underscore.string
Demo:
http://jsfiddle.net/abdennour/Vyqtt/
HTML code:
<p>
<a href="#box1" >img1</a>
<a href="#box2" >img2</a>
<a href="#box3" >img3</a>
<a href="#box4" >img4</a>
</p>
<div style="font-size:30px"></div>
JavaScript code:
var comm = "#box"
$('a').click(function() {
$('div').html(_($(this).attr('href')).strRight(comm))})
If you have a suffix as follows:
href="box1az"
You can use the following demo:
http://jsfiddle.net/abdennour/Vyqtt/1/
function retrieveNumber(all, prefix, suffix) {
var left = _(all).strRight(prefix);
return _(left).strLeft(suffix);
}
Here's a solution that checks for no data:
var someStr = 'abc'; // Add 123 to string to see the inverse
var thenum = someStr.match(/\d+/);
if (thenum != null)
{
console.log(thenum[0]);
}
else
{
console.log('Not a number');
}
var elValue = "-12,erer3 4,-990.234sdsd";
var isNegetive = false;
if(elValue.indexOf("-") == 0)
isNegetive = true;
elValue = elValue.replace( /[^\d\.]*/g, '');
elValue = isNaN(Number(elValue)) ? 0 : Number(elValue);
if(isNegetive)
elValue = 0 - elValue;
alert(elValue); // -1234990.234
With regular expressions, how to get numbers from a string, for example:
String myString = "my 2 first gifts were made by my 4 brothers";
myString = myString.replaceAll("\\D+", "");
System.out.println("myString: " + myString);
The result of myString is "24".
You can see an example of this running code at http://ideone.com/iOCf5G.
Use this one-line code to get the first number in a string without getting errors:
var myInt = parseInt(myString.replace(/^[^0-9]+/, ''), 10);
Please check the below JavaScript code. There you can get only a number.
var txt = "abc1234char5678#!9";
var str = txt.match(/\d+/g, "") + '';
var s = str.split(',').join('');
alert(Number(s));
Output: 1234567789
You need to add "(/\d+/g)" which will remove all non-number text, but it will still be a string at this point. If you create a variable and "parseInt" through the match, you can set the new variables to the array values. Here is an example of how I got it to work:
var color = $( this ).css( "background-color" );
var r = parseInt(color.match(/\d+/g)[0]);
var g = parseInt(color.match(/\d+/g)[1]);
var b = parseInt(color.match(/\d+/g)[2]);
This answer will cover most of the scenarios. I came across this situation when a user tried to copy paste the phone number.
$('#help_number').keyup(function() {
$(this).val().match(/\d+/g).join("")
});
Explanation:
str = "34%^gd 5-67 6-6ds"
str.match(/\d+/g)
It will give an array of strings as output:
["34", "56766"]
 
str.match(/\d+/g).join("")
join() will convert and concatenate that array data into a single string.
Output:
"3456766"
In my example, I needed the output as 209-356-6788, so I used replace():
$('#help_number').keyup(function() {
$(this).val($(this).val().match(/\d+/g).join("").replace(/(\d{3})\-?(\d{3})\-?(\d{4})/, '$1-$2-$3'))
});
Written without a regular expression:
// Without Regex
function extractNumber(string) {
let numArray = string.split('').map(item => {
if (typeof +item === 'number' && !isNaN(+item))
return +item
})
return +numArray.join('')
}
extractNumber('#1200milion$') // 1200
In one of my projects I had to take a rating value from a string. This is what I used:
let text = '#xbox2'
let num = text.trim().
split('').
map(num => Number(num)).
filter(x => Number.isInteger(x))
Use:
changeStrangeDate(dateString: string) {
var sum = 0;
var numbers = dateString.match(/\d+/g);
if (numbers.length > 1) {
numbers.forEach(element => {
sum += parseInt(element);
}
);
}
console.log(new Date(sum).toDateString());
return new Date(sum).toUTCString();
}
You can do it like that and then call a function where you need it, with a parameter.
this.changeStrangeDate('/Date(1551401820000-0100)/');

Match or search string by comma separated values by jquery or js

I want to match/search string partially by js array to a string. my string and array example are below
var str = "host, gmail, yahoo";
var search = 'new#gmail.com';
i already tried as below:
if( str.split(',').indexOf(search) > -1 ) {
console.log('Found');
}
It should match with gmail for string new#gmail.com
i am using this with reference of: https://stackoverflow.com/a/13313857/2384642
There's a few issues here. Firstly, your input string has spaces after the comma, yet you're splitting by just the comma hence you'd get ' gmail' as a value, which would break the indexOf() result. Either remove the spaces, or use split(', ').
Secondly, you need to loop through the resulting array from the split() operation and check each value in the search string individually. You're also currently using indexOf() backwards, ie. you're looking for new#gmail.com within gmail. With these issues in mind, try this:
var str = "host,gmail,yahoo";
var search = 'new#gmail.com';
str.split(',').forEach(function(host) {
if (search.indexOf(host) != -1) {
console.log('Found');
}
});
Also note that you could define the array of hosts explicitly and avoid the need to split():
var hosts = ['host', 'gmail', 'yahoo'];
var search = 'new#gmail.com';
hosts.forEach(function(host) {
if (search.indexOf(host) != -1) {
console.log('Found');
}
});
As the split method returns an array, you'd have to iterate through that array and check for matchs.
Here's a demo:
// added gmail.com to the string so you can see more matched results(gmail and gmail.com).
var str = "host, gmail, yahoo, gmail.com",
search = 'new#gmail.com',
splitArr = str.replace(/(\,\s+)/g, ',').split(','),
/* the replace method above is used to remove whitespace(s) after the comma. The str variable stays the same as the 'replace' method doesn't change the original strings, it returns the replaced one. */
l = splitArr.length,
i = 0;
for(; i < l; i++) {
if(search.indexOf(splitArr[i]) > -1 ) {
console.log('Found a match: "' + splitArr[i] + '" at the ' + i + ' index.\n');
}
}
As you can see, none substring in str contains search value. So you need to invert the logic. something like this.
var str = "host, gmail, yahoo";
var search = 'new#gmail.com';
var res = str.split(', ').filter(function(el) {
return search.indexOf(el) > -1;
});
console.log(res);
Declare the Array with this code so you don't need to separate it with the ','
var str = new Array ("host","gmail","yahoo");
To find the element, use something this
for (i = 0; i < str.length; ++i)
{
val = str[i];
if (val.substring(0) === "gmail")
{
res = val;
break;
}
}
//Use res (result) here
Note: This is my first answer, so plese forgive me if there are some errors...
It should match with gmail for string new#gmail.com
In order to achieve your result you need to extract gmail from the search string.
You can achieve this with regex:
search.match( /\S+#(\S+)\.\S+/)[1]
var str = "host, gmail, yahoo, qwegmail";
var search = 'new#gmail.com';
if( str.split(', ').indexOf(search.match( /\S+#(\S+)\.\S+/)[1]) > -1 ) {
console.log(search + ': Found');
} else {
console.log(search + ': Not found');
}
search = 'asd#qwegmail.com';
if( str.split(', ').indexOf(search.match( /\S+#(\S+)\.\S+/)[1]) > -1 ) {
console.log(search + ': Found');
} else {
console.log(search + ': Not found');
}

Javascript:How to remove occurrence of a character from a value?

Here i am trying to replace an occurrence of a string and 4 characters after that by blank.
For Eg i have the below string:
var a=ssss~ABC*bvbfg~JJJ*ertert~PMU*trert~GFRG*qqqq~HGHGHG
I get the value as bvbfg
Now when i get the value i should replace bvbfg~JJJ to blank value and the string should become
var a=ssss~ABC*ertert~PMU*trert~GFRG*qqqq~hghgh
Similarly if i get the value as qqqq i should replace qqqq~HGHGHG to blank value
and the new value should be
var a=ssss~ABC*bvbfg~JJJ*ertert~PMU*trert~GFRG
I tried making using of regular expression:
Something as below(For Eg)
mystring.replace(/bvbfg/g , "newchar");
But the results i saw were not good. It is a bit tricky. Any guidance. Thanks.
function remove(str, tok) {
var regex = new RegExp('\\b' + tok + '~[^*]*\\*?', 'i'); // if you want it to be case sensetive, then remove the 'i' parameter
return str.replace(regex, '')
/*.replace(/^\*|\*$/, '')*/; // uncomment this to remove *s from the start and the end
}
var a = "ssss~ABC*bvbfg~JJJ*ertert~PMU*trert~GFRG*qqqq~HGHGHG";
console.log(remove(a, "ertert"));
Parse:
function parse(str) {
return str.split('*')
.reduce(function(res, e) {
var parts = e.split('~');
res[parts[0]] = parts[1];
return res;
}, {});
}
var a = "ssss~ABC*bvbfg~JJJ*ertert~PMU*trert~GFRG*qqqq~HGHGHG";
console.log(parse(a));
I am new to regex, this is what I tried and it seems to work.
/bvbfg~(\w+)[*]?/g
Demo: http://regexr.com/3fagf
But I would suggest you to use Wiktor Stribiżew's answer.
Here you go... short and simple :)
document.getElementById('btn').onclick = function() {
var value = document.getElementById('value').value,
a = 'ssss~ABC*bvbfg~JJJ*ertert~PMU*trert~GFRG*qqqq~HGHGHG',
regx = new RegExp('\\*?' + value + '~\\w*', 'g');
console.log(a.replace(regx, ''));
}
<input id="value" type="text">
<button id="btn">Submit</button>
Putting everything together with Stribiżew's regex:
function getRegexp(s) {
return new RegExp( s + '~[^*]*\\*?', 'gi');
}
var str = 'ssss~ABC*bvbfg~JJJ*ertert~PMU*trert~GFRG*qqqq~HGHGHG';
var s = 'bvbfg';
console.log(str.replace(getRegexp(s), ''));
s = 'qqqq';
console.log(str.replace(getRegexp(s), ''));

Javascript to Trim spaces when enter value in text box

I am currently trying to show one text box value in another using javascript function
function fillTextbox() {
var txtCompanyName = document.getElementById("txtCompanyName").value;
document.getElementById("txtSecureSite").value = txtCompanyName;
}
and i successfully done this but now i want to trim spaces when my user enters a name with spaces. Please help as i am new in javascript.
Use string.trim()
document.getElementById("txtSecureSite").value = txtCompanyName.toString().trim();
From MDN
Running the following code before any other code will create
String.trim if it's not natively available.
if(!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g,'');
};
}
You can trim any string value like this:
" string ".trim(); // outputs: "string"
Based on: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim
Or use jQuery.trim() instead:
$.trim(" string "); // outputs: "string"
Use replace(/(^\s+|\s+$)/g, '') to remove spaces from the begining and end of the string.
function fillTextbox() {
var txtCompanyName = document.getElementById("txtCompanyName").value;
var company = txtCompanyName.replace(/(^\s+|\s+$)/g, '');
document.getElementById("txtSecureSite").value = company;
}
Try :
function fillTextbox() {
var txtCompanyName = document.getElementById("txtCompanyName").value;
var company = txtCompanyName.replace(/\s/g, "");
document.getElementById("txtSecureSite").value = company;
}
var orig = " foo ";
alert(orig.trim());
In your case:
var txtCompanyName = document.getElementById("txtCompanyName").value;
txtCompanyName = txtCompanyName.toString().trim();
See Trim() in javascript
Keep it simple, try this 👇
var CompanyName = document.getElementById("txtCompanyName"),
CompanyNameTrimmed = CompanyName.value.trim(),

Remove a letter(:) from a string

I have strings like Name:, Call:, Phone:....and so on in my table. I am learning jQuery and was able to access the text. My tutorial has used trim() to remove any whitespaces. But I want o remove ":" from the end of each string (and yes, it always lies in the end after calling trim() method). So how to achieve it.
Its my code:
<script type="text/javascript">
$(function ()
{
$(':input[type=text], textarea').each
(
function ()
{
var newText = 'Please enter your ' +
$(this).parent().prev().text().toLowerCase().trim();
$(this).attr('value', newText);
}).one('focus', function ()
{
this.value = '', this.className = ''
}).addClass('Watermark').css('width', '300px');
});
</script>
trim(":") did not help...
You can replace all : characters:
var str = '::a:sd:';
str = str.replace(/:/g,''); // str = 'asd';
Or use a handy rtrim() function:
String.prototype.rtrim = function(character) {
var re = new RegExp(character + '*$', 'g');
return this.replace(re, '');
};
var str = '::a:sd:';
str = str.rtrim(':'); // str = '::a:sd';
In this case just use the plain old JavaScript replace or substr methods.
You can also use a regular expression that looks for colon as the last character (the character preceding the regexp end-of-string anchor "$").
"hi:".replace(/:$/, "")
hi
"hi".replace(/:$/, "")
hi
"h:i".replace(/:$/, "")
h:i
This is a simplified, inline version of the rtrim function in Blender's answer.
EDIT: Here is a test fiddle for Blender's corrected rtrim function. Note that his RegExp will delete multiple occurrences of the specified character if the string ends with multiple instances of it consecutively (example bolded below).
http://jsfiddle.net/fGrPb/5/
input = '::a:sd:' output = '::a:sd'; input = 'hi:' output = 'hi'; input = 'hi:::' output = 'hi'; input = 'hi' output = 'hi'; input = 'h:i' output = 'h:i'
To chop the last character of a string use string.slice(0,-1)
You can use a regular expression to remove the colon (:).
Replace one instance:
var with_colon = 'Stuff:';
var regex = /([^:]*):/;
var without_colon = regex.exec(with_colon)[1];
alert(without_colon);
Result: Stuff
Replace all instances:
var with_colon = 'Stuff: Things:';
var without_colon = with_colon.replace(/([^:]*):/g,'$1');
alert(without_colon);
Result: Stuff Things
var myStr = "something:";
myStr = myStr.slice(0, -1);
var a="name:";
var b=a.split(":");
alert(b[0]);
one way is to use lastIndexOf
var str='Name:, Call:, Phone:';
var index=str.lastIndexOf(":");
alert(index);
var s=str.substring(0,index);
alert(s);
DEMO
This checks if the last character is a colon. If it is, the last character is removed.
if (str[str.length - 1] === ":") {
str = str.slice(0, -1);
}
If there can be multiple trailing colons, you can replace if with while, like this:
while (str[str.length - 1] === ":") {
str = str.slice(0, -1);
}
You could even make a generic trim function that accepts a string and a character and trims trailing instances of that character:
var trim = function(str, chr) {
while (str[str.length - 1] === ":") {
str = str.slice(0, -1);
}
return str;
}
function trim(str) {
str = str.replace(/^:*/,"");
return str.replace(/:*$/,"");
}
str = str.substring(0,str.lastIndexOf(":"));
Note that this removes everything from the last : to the end of the string (for example, any whitespace after the :).

Categories

Resources