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 8 years ago.
Improve this question
How in javascript to make regex to recognize and extract integer numbers for coordinates which have format like
( number1, number2 )
between ( and number1 and , and number2 and ) can be arbitrary number of whitespaces (user are going to enter coordinates so I don't want to force strict format without whitespaces)
(\d+,\d+)
what to add to this so it works ?
There are a few choices, pending your actual input.
To match all "whitespace characters" (space, tab, carriage return, newline and form feed), you can use the \s shorthand approach. If you want a number, in this case \d+, to be surrounded by "0 or more" of these, you would use:
\s*\d+\s*
In your full pattern:
\( # opening parentheses
\s*\d+\s*, # first number followed by a comma
\s*\d+\s* # second number
\) # closing parentheses
Note: The parentheses are escaped here as they're special characters in a regular expression pattern.
Now, if you don't want to match "all whitespace" and were only interested in plain spaces, for example, you could use a matching character set of [ ] (i.e. a space between two brackets). In the pattern from above:
\(
[ ]*\d+[ ]*,
[ ]*\d+[ ]*
\)
Not really sure how you want to use the matches, I'm assuming you want the numbers returned individually so in that case, you can use the following:
var str = '(1, 2)';
var matches = str.match(/\(\s*(\d+)\s*,\s*(\d+)\s*\)/);
if (matches) {
var firstNumber = matches[1];
var secondNumber = matches[2];
// do stuffs
}
Note: In the pattern I used here, I've wrapped the \d+s in parentheses; this will "capture" those values in to groups which are then accessible by their "group index". So, the first (\d+) will be available in matches[1] and the second will be available in matches[2].
Try this regex: \(\s*\d+\s*,\s*\d+\s*\).
Fiddle
Related
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 6 months ago.
Improve this question
How could I get the specific substring between 'Y___(string i want to get)___N'?
For example:
"Y___INT_GET_ERROR_CONFIGS___N"
"INT_GET_ERROR_CONFIGS"
You can get everything inside by Y___(.*?)___N, you can use matchAll to get all instance that matches this case, and you can loop through and get the group value.
const str = `Y___INT_GET_ERROR_CONFIGS___N
INT_GET_ERROR_CONFIGS Y___INT_GET_ERROR_SOMETHING___N`
const result = str.matchAll(/Y___(.*?)___N/g);
for (match of result) {
console.log(match[1])
}
If it's just the first occurrence you wish you match, then:
'Y___(string you want to get)___N'.match(/(?<=Y___).+(?=___N)/)
Result:
"(string you want to get)"
If you want all such occurrences to be returned, then use the g flag:
`Y___(string you want to get)___N
.
.
.
Y___(second string you want)___N`.match(/(?<=Y___).+(?=___N)/g)
Result:
["(string you want to get)", "(second string you want)"]
Explanation:
(?<=Y___): A positive lookbehind stipulates that matches will be preceded by the contents of the lookbehind, namely "Y___". The contents of the lookbehind does not form part of the match result, and also does not consume characters during matching.
.+: Matches at least one instance of any character, but will match as many as possible.
(?=___N): A positive lookahead stipulates that matches will be proceeded by the contents of the lookahead, namely "___N". The contents of the lookahead does not form part of the match result, nor does it consume characters during matching.
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 7 months ago.
Improve this question
How to use regex to replace all the occurrences of space ( . ) '- with underscores.
I used chaining of replaceAll. Is there a better approach?
const str = "Certificate of Naturalization (From N-550 or N-570) or Certificate of U.S Citizenship (From N-560 or N-561)";
console.log(((str).toUpperCase()).replaceAll(' ', '_').replaceAll('\'', '_').replaceAll('(', '').replaceAll(')', '').replaceAll('-', '_').replaceAll('.', '_'));
You can put the characters you want to replace inside [] and you need to escape some special characters with \
there are 12 characters with special meanings: the backslash , the caret ^, the dollar sign $, the period or dot ., the vertical bar or pipe symbol |, the question mark ?, the asterisk or star *, the plus sign +, the opening parenthesis (, the closing parenthesis ), the opening square bracket [, and the opening curly brace {, These special characters are often called “metacharacters”. Most of them are errors when used alone.
If you want to use any of these characters as a literal in a regex, you need to escape them with a backslash.
const str = `Certificate of Naturalization (From N-550 or N-570) or Certificate of U.S Citizenship (From N-560 or N-561)`;
const result = str.replace(/[-'\s\(\)\.]/g, '_')
console.log(result)
Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 6 years ago.
Improve this question
I have two words within sentence.
EX: big BUTTON
here I need to check second word is in uppercase using regex expression.
Square brackets [] are your friend. They allow you to specify characters that will match. To match the first work, you need to check for any letter. This can be done with [a-zA-Z]. This will match any letter between a and z, as well as A and Z. for the second word, you only want to match uppercase, so only use [A-Z]. To get 1 or more matches, put a + after the closing bracket.
Putting this all together, with a space in between the words, you get [a-zA-Z]+ [A-Z]+.
The carat ^ is used to signify the start of the string, and the dollar sign $ is used to signify the end of the string. Your question somewhat vague, so here are a couple scenarios:
Each sentence is only two words with a space in between them: ^[a-zA-Z]+ [A-Z]+$
Each sentence has at least two words and may or may not end in a period: ^[a-zA-Z]+ [A-Z]+( |\.?$)
In the second example the parenthesis with a pipe (|) is used as an OR statement. The period is escaped since it is a special character (matches any single character). The question mark denotes 0 or 1 of the preceding character, which is a period. So ( |\.?$) will match a space or a sentence that ends with or without a period.
Here is a good site that has information on Regexes: http://www.regular-expressions.info/
This regexp looks for any sequence, starting at the beginning of the string (^), of alphanumeric characters (\w)--that's the first word--then a space, followed by a sequence of upper-case letters ([A-Z]+)--the second word--followed by either a space or the end of the string ($).
/^\w+ [A-Z]+( |$)/
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 7 years ago.
Improve this question
Given a string "translateX(-50%) scale(1.2)" with N transform functions
1) How can I match the names ["translateX", "scale"]?
2) How can I match the values ["-50%", "1.2"]?
If you absolutely must use regular expression to do this, you can use the exec() method in a loop, pushing the match result of the captured group(s) to the desired arrays of choice.
var str = 'translateX(-50%) scale(1.2)'
var re = /(\w+)\(([^)]*)\)/g,
names = [], vals = [];
while (m = re.exec(str)) {
names.push(m[1]), vals.push(m[2]);
}
console.log(names) //=> [ 'translateX', 'scale' ]
console.log(vals) //=> [ '-50%', '1.2' ]
The regular expression uses two capture groups, the first matches/captures word characters only, the second uses negation which will match any character except ) "zero or more" times.
Try something like (\w+)\((.+?)\):
(\w+): Match the regular expression below and capture its match into backreference number 1
\w+: Match a single character that is a “word character” (letters, digits, and underscores)
+: Between one and unlimited times, as many times as possible, giving back as needed (greedy)
\(: Match the character “(” literally
(.+?): Match the regular expression below and capture its match into backreference number 2
.+?: Match any single character that is not a line break character
+?: Between one and unlimited times, as few times as possible, expanding as needed (lazy)
\): Match the character “)” literally
var str = "translateX(-50%) scale(1.2)",
regex = /(\w+)\((.+?)\)/g,
match, names = [], values = [];
while(match = regex.exec(str)) {
names.push(match[1]);
values.push(match[2]);
}
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 8 years ago.
Improve this question
I need a regular expression for a string that
starts with Alphabets (no number)
max Length 8
No special characters or space.
string can have number or _ except for starting character.
This would work:
/^[a-z][a-z0-9_]{0,7}$/i
For example,
/^[a-z][a-z0-9_]{0,7}$/i.test('a1234567'); // true
/^[a-z][a-z0-9_]{0,7}$/i.test('01234567'); // false
The \w shorthand is for all letters, numbers and underscores. [A-Za-z] is overkill, the /i flag will get you all letters, case insensitive.
Therefore, a super simple regex for what you need is:
/^[a-z]\w{0,7}$/i
/^[a-z]\w{0,7}$/i.test("a1234567");
> true
/^[a-z]\w{0,7}$/i.test("a12345697");
> false
/^[a-z]\w{0,7}$/i.test("01234567");
> false
Try this out:
/^[A-Za-z]{1}[a-zA-Z0-9_]{0,7}$/
Try this one:
/^[a-zA-Z][0-9a-zA-Z_]{0,7}$/
This requires an alpha start character, and optionally allows up to 7 more characters which are either alphanumeric or underscore.
EDIT: Thanks, Jesse for the correction.
And another version with lookaheads :)
if (subject.match(/^(?=[a-z]\w{0,7}$)/i)) {
// Successful match
}
Explanation :
"^" + // Assert position at the beginning of the string
"(?=" + // Assert that the regex below can be matched, starting at this position (positive lookahead)
"[a-z]" + // Match a single character in the range between “a” and “z”
"\\w" + // Match a single character that is a “word character” (letters, digits, etc.)
"{0,7}" + // Between zero and 7 times, as many times as possible, giving back as needed (greedy)
"$" + // Assert position at the end of the string (or before the line break at the end of the string, if any)
")"