Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 2 years ago.
Improve this question
How would I test a string to see if it contains a specific substring and then capitalize that substring?
var string = " A Fine and Rare George Iii Neoclassical Ormolu Urn Clock"
And find and capitalize the Roman numeral to III.
Another example:
var string2 = "Platinum Pf00673"
Find and capitalize letters in strings that contain numbers, so the above becomes PF00673
You can make use of the callback to String#replace.
var string2 = "Platinum Pf00673";
var result = string2.replace(/\w*[0-9]\w*/g, match=>match.toUpperCase());
console.log(result);
Use regex to match and replace.
var string2 = "Platinum Pf00673"
var reg = new RegExp("[A-Z]+[0-9]+[A-Z0-9]+", "gi");
var matches = string2.matchAll(reg);
for(var match of matches)
{
var parts = string2.split("");
parts.splice(match.index, match[0].length, ...match[0].toUpperCase().split(""));
string2 = parts.join("");
}
console.log(string2);
A simple solution could be to create a helper function like so
const capitlizeSubStr = (string, substring) => {
const regex = new RegExp(substring, 'gi')
const newString = string.replace(regex, substring.toUpperCase())
return newString
}
Answering for the Roman Numeral question.
var string1 = "A Fine and Rare George Iii Neoclassical Ormolu Urn Clock";
var result = string1.replace(/M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})/ig, match=>match.toUpperCase());
console.log(result);
It's an extension of hev1's answer.
capitalize romans:
'world war Iii'.replace(/\w+/g, word => word.match(/^[MCDXVI]+$/i) ? word.toUpperCase() : word)
// "world war III"
capitalize words with digits
'Platinum Pf00673'.replace(/\w+/g, word => word.match(/\d/) ? word.toUpperCase() : word)
// "Platinum PF00673"
Related
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 11 months ago.
Improve this question
how to get first 2 character of string in javascript like this "Hello world " => get this "wo"?
another example
"Osama Mohamed" => M.
you can use string.split(' '), this function will split you string into an array, for example:
let s = "Hello World";
console.log(s.split(" ")) // will log ["Hello", "World"]
then you can get the second word using array[index] when index the index of your desired word in said array.
now using string charAt we can get the first letter of the word.
now to put everything together:
let s = "Hello World"
let s_splited = s.split(" ") // ["Hello", "World"]
let second_word = s_splited[1]
console.log(second_word.charAt(0))
string = "Hello world";
split_string = string.split(" ");
second_word = split_string[1]
first_char = second_word[0]
console.log(first_char)
OR
string = "Hello world";
console.log(string.split(" ")[1][0])
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 2 years ago.
Improve this question
i have a variable and I want to separate the name whit a space letter by letter and then UpperCase the letters
var name = "Tom Hanks";
console.log(name) has to be equal to "T O M H A N K S"
var name = "Tom Hanks";
var result = name.toUpperCase().split("").join(" ").replace(/\s+/g, " ");
console.log(result);
First you must split the string to separate the letters of the word and save 'em in a array object. For that you can use the String.split() function:
const myString = 'Tom Hanks';
const splittedString = myString.split('');
Then you can use Array.join() function to create a new string with spaces between the letters of the previous array:
const stringWithSpaces = splittedString.join(' ');
Finally you can use the String.toUpperCase() to set the "caps lock" on:
stringWithSpaces.toUpperCase();
So, here is the complete snippet:
const myString = 'Tom Hanks';
const splittedString = myString.split('');
const stringWithSpaces = splittedString.join(' ');
const upperCaseStringWithSpaces = stringWithSpaces.toUpperCase();
console.log(upperCaseStringWithSpaces);
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 2 years ago.
Improve this question
So I have a text with a pattern where there are two constant letters (start, end) and in between them there can be any letter. For example if start is X and end is Y. Then I could have something like this:
ABCDXaYXpYXpYXlYXeYEFGHOASDASDADASD
Which is the word apple where each letter is sorrounded by X and Y
What would be the regex where I can match only the string XaYXpYXpYXlYXe? Thank you for your help.
Here's the answer for the edited version. A bit of ugly trickery, but oh well.
var str = "ABCDXaYXpYXpYXlYXeYEFGHOASDASDADASD";
var regex = /(?<=[XY])(.*)(?=[XY])/;
var result = str.match(regex);
regex = /[XY]/g;
result = result[0].replace(regex, ""); // "apple"
You could either match anything that isn't X or Y (although it'll break it up into substrings):
var str = XaYXpYXpYXlYXeY;
var regex = /[^XY]/g; //case sensitivity optional
var result = str.match(regex) // ["a", "p", "p", "l", "e"]
or you could replace all of the X and Y with blank spaces.
var str = XaYXpYXpYXlYXeY;
var regex = /[XY]/g; //case sensitivity still optional
var result = str.replace(regex, ""); // "apple"
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 2 years ago.
Improve this question
Following are 2 strings:
" at callback (/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback-connector-rest/lib/rest-builder.js:541:21)"
" at /Users/lem/Projects/RingAPI/packages/server/node_modules/#loopback/repository/node_modules/loopback-datasource-juggler/lib/observer.js:269:22"
How do I split them to these using JS and Regex?
['callback', '/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback-connector-rest/lib/rest-builder.js', '541', '21']
['', '/Users/lem/Projects/RingAPI/packages/server/node_modules/#loopback/repository/node_modules/loopback-datasource-juggler/lib/observer.js', '269', '22']
try regexp named groups
https://github.com/tc39/proposal-regexp-named-groups
it adds result readability for such strange regexes ;)
const strings = [
" at callback (/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback-connector-rest/lib/rest-builder.js:541:21)",
" at /Users/lem/Projects/RingAPI/packages/server/node_modules/#loopback/repository/node_modules/loopback-datasource-juggler/lib/observer.js:269:22"
];
const regex = /^\s*?at\s?(?<source>.*?)\s\(?(?<path>.*?):(?<row>\d*):(?<column>\d*)/;
strings.forEach(string => {
const result = string.match(regex);
resultElement.innerHTML +=
'\n' + JSON.stringify({string, "result.groups": result.groups}, null, 4)
})
<pre id="resultElement"/>
You can use regex for such purpose, i.e:
const regex = /at( (?:[a-z]+)?)\(?(.+)\:(\d+)\:(\d+)\)?/;
//const str = " at callback (/Users/lem/Projects/RingAPI/packages/server/node_modules/loopback-connector-rest/lib/rest-builder.js:541:21)";
const str = " at /Users/lem/Projects/RingAPI/packages/server/node_modules/#loopback/repository/node_modules/loopback-datasource-juggler/lib/observer.js:269:22";
const found = str.match(regex);
found.splice(0, 1)
console.log(found)
It works for both strings!
I've wrote simple parse function for you:
function parse(string) {
const functionName = string.match(/at .* /);
return [
...(functionName && [functionName[0].slice(2).trim()] || ['']),
...string.match(/\/.*/)[0].split(':')
];
}
First of all I try to extract function name. If it exists I remove 'at' word and use trim function to remove unnecessary spaces. Then I look for substring beginning with slash '/' and match every character after it. Last step is to split returned string.
I believe it matches your requirements.
I've also prepared demo in stackblitz: https://stackblitz.com/edit/js-ol22yf
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I have a requirement to remove last n characters from string or remove 'page' from a particular string.
Eg:
var string = 'facebookpage';
Expected output string = 'facebook'
I would like to remove 'page' from the string.
Done it using substring.
var str = "facebookpage";
str = str.substring(0, str.length - 4);
Could you help me to find some better way to do it.
Regex for this:
//str - string;
//n - count of symbols, for return
function(str, n){
var re = new RegExp(".{" + n + "}","i");
return str.match(re);
};
EDIT:
For remove last n characters:
var re = new RegExp(".{" + n + "}$","i");
return str.replace(re, "");
UPDATE:
But use regex for this task, not good way; For example, AVG Runtime for 100000 iterations:
Str length solution = 63.34 ms
Regex solution = 172.2 ms
Use javascript replace function
var str = "facebookpage";
str = str.replace('page','');
You can use this regular expression :
(.*)\\w{4}
code :
var regex =(new RegExp("(.*)\\w{4}"))
val output = regex .exec("facebookpage")
// output is : ["facebookpage", "facebook"]
// output[1] is the Expected output which you want.
Hope this helps.