(js) regex match letter exclude phrase - javascript

I'd like to match every word that starts with an exclamation point.
I got so far and it works. regex: ^!.
But now I wanna exclude the word "!test". So !hi matches but !test doesn't.
There's no NOT operator, so any ideas?

you can use the regex
function match(str){
let regex = /^!(?!test)\w+/;
return str.match(regex) != null;
}
console.log(match('!testing'))
console.log(match('!hihello'))
(?!test) is a negative look ahead which ensures !test is not matched

Related

Regex catch from the hash sign "#" to the next white space

I have a script line this :
#type1 this is the text of the note
I've tried this bu didn't workout for me :
^\#([^\s]+)
I watch to catch type in other words I to get whats between the hash sign "#" and the next white space, excluding the hash "#" sign, and the string that I want to catch is alphanumeric string.
With the regex functionality provided by Javascript:
exec_result = /#(\w*)/.exec('#whatever string comes here');
I believe exec_result[1] should be the string you want.
The return value of exec() method could be found over here:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
You're really close:
/^\#(\w+)\s/
The \w matches any letters or numbers (and underscores too). And the space should be outside the matching group since I guess you don't want to capture it.
To get an alphanumeric match (which will get you type1), instead of the negated character class [^\s] which matches not a whitespace character, you could use a character class and specify what you want to match like [A-Za-z0-9].
Then use a negative lookahead to assert what is on the right is not a non-whitespace char:
^#([A-Za-z0-9]+)(?!\S)
Regex demo
Your match is in the first capturing group. Note that you don't have to escape the \#
For example using the case insensitive flag /i
const regex = /^#([A-Za-z0-9]+)(?!\S)/i;
const str = `#type1 this is the text of the note`;
console.log(str.match(regex)[1]);
If you only want to match type, you might use:
^#([a-z]+)[a-z0-9]*(?!\S)
Regex demo
const regex = /^#([a-z]+)[a-z0-9]*(?!\S)/i;
const str = `#type1 this is the text of the note`;
console.log(str.match(regex)[1]);
I've figured it out.
/^\#([^\s]+)+(.*)$/

Javascript Regex - match capital/upperacase letter in a middle of a word (in a sentence)?

I need to match all capital letters only if they are in a middle of the word. For exmaple RegExr would have a match for letter E. someThings for letter T.
If capital letter start at the start of of the word it should not match.
This regex almost match it, but it actually matches both lower case next to upper case letter.
/[a-z][A-Z]/g
For example for word RegExr, it matches gE, but I need to match only E.
update
Updated title to specify that this case happens in a sentence, not single word.
You might be able to use non-word-boundaries here. Word characters (\w) are letters [a-zA-Z], numbers [0-9] and the underscore _.
By using \B[A-Z]\B you can match every uppercase letter, that is inside a word. This will also match:
9Gag
_H_ello
This should do it:
/\B[A-Z]\B/g
Use \B for word boundries
See here for tests and explanation.
The solution using RegExp.prototype.exec() function:
var str = 'RegExr someTextBetween JavaScript',
matched = [],
re = /[^A-Z\s]([A-Z])[^A-Z\s]/g;
while ((m = re.exec(str)) !== null) {
matched.push(m[1]);
}
console.log(matched);

How to find string's word start with some character?

I want to get value of string's like follow.
If string's word start with some character like ("This is world").match(/^wo/g); It should return false But, i want it's true.
Because string has one word which start from wo.I don't want to execute line or string start with wo.
Please any one know using Regex how to check whole line's words check start with XYZ.
NOTE : I already Know that Line splitting with white-space and than after check every word start with XYZ But I don't want to split any line.
Thank you
firstly .match does NOT return boolean
you want regexp.test
(/\bwo/g).test("This is world");
\b matches a zero-width word boundary - see docs
try this :
var str = "The rain in SPAIN stays mainly in the plain";
var res = str.match(/ain/g);
A capturing or non-capturing group will do this job.
alert(/(^|\s)wo/.test("This is world"));
alert(/(^|\s)wo/.test("This is bar;world"));

JavaScript regexp not matching

I am having a difficult time getting a seemingly simple Regexp. I am trying to grab the last occurrences of word characters between square brackets in a string. My code:
pattern = /\[(\w+)\]/g;
var text = "item[gemstones_attributes][0][shape]";
if (pattern.test(text)) {
alert(RegExp.lastMatch);
}
The above code is outputting "gemstones_attributes", when I want it to output "shape". Why is this regexp not working, or is there something wrong with my approach to getting the last match? I'm sure that I am making an obvious mistake - regular expressions have never been my string suit.
Edit:
There are cases in which the string will not terminate with a right-bracket.
You can greedily match as much as possible before your pattern which will result in your group matching only the last match:
pattern = /.*\[(\w+)\]/g;
var text = "item[gemstones_attributes][0][shape]";
var match = pattern.exec(text);
if (match != null) alert(match[1]);
RegExp.lastMatch gives the match of the last regular expression. It isn't the last match in the text.
Regular expressions parse left to right and are greedy. So your regexp matches the first '[' it sees and grabs the words between it. When you call lastMatch it gives you the last pattern matched. What you need is to match everything you can first .* and then your pattern.
i think your problem is in your regex not in your src line .lastMatch.
Your regex returns just the first match of your square brackets and not all matches. You can try to add some groups to your regular expression - and normally you should get all matches.
krikit
Use match() instead of test()
if (text.match(pattern))
test() checks for a match inside a string. This is successfull after the first occurence, so there is no need for further parsing.

jquery REGEX for longstring with azAZ-09-specialchars and |

Hello can someone help me in jquery regex?
whew coz im stack here since last night and finally iv'e decided to ask some help :)
any here's my regex abd the string is in exg variable.. then i want to split the string each
matches[0] = 'eNortjI0sLBScgQDz3yTfK98XCdH59RKc4M8&+SSXFzzXFz3UE9H9yzfYMfCYtPiDLes0NSAXCL3nIj0osJcIvNCjwxLv6z8YhPTXFxv8&KSMNekjIrgqqzQvOJyy0zXNPMoZ4vS0PQS4+S0&IIgU7OssPIolygXJWtcMMMFXCch|eNortjI0sLRScgQDz3yTfK98XCfHXDBDjzx3X4&cXCLXygKn4tzsNCNcJ+NMk+xEM6Ok&OIq1+DcXFxLw8AwjyhHb480lyxTg&LkKv8sXw&zpCSnJE+XYo&EVH&3yKyAsMjEtKxSi4CIqlwigwL&giinXDC3wCiXKBcla1wwpPEmEA==|';
matches[1] = 'eNortjI0NLJScgQDz3yTfK98XCdH9yCPZJ&CiCpD36xcMMuSsLwox6qAwMqkUAPTlChHI8ugvDQL9zzjbBMfT8u8RIOgMgvnHJ9SpzynvFDfQAugijBLv6CgXDBT&0LzKMdI06BIf9OyKGd&U58kN19fV8colygXJWtcMNaqJP8=|';
var regex = /[a-zA-Z]+[0-9]+[/-=&_]+|/g;
var exg = 'eNortjI0sLBScgQDz3yTfK98XCdH59RKc4M8&+SSXFzzXFz3UE9H9yzfYMfCYtPiDLes0NSAXCL3nIj0osJcIvNCjwxLv6z8YhPTXFxv8&KSMNekjIrgqqzQvOJyy0zXNPMoZ4vS0PQS4+S0&IIgU7OssPIolygXJWtcMMMFXCch|eNortjI0sLRScgQDz3yTfK98XCfHXDBDjzx3X4&cXCLXygKn4tzsNCNcJ+NMk+xEM6Ok&OIq1+DcXFxLw8AwjyhHb480lyxTg&LkKv8sXw&zpCSnJE+XYo&EVH&3yKyAsMjEtKxSi4CIqlwigwL&giinXDC3wCiXKBcla1wwpPEmEA==|eNortjI0NLJScgQDz3yTfK98XCdH9yCPZJ&CiCpD36xcMMuSsLwox6qAwMqkUAPTlChHI8ugvDQL9zzjbBMfT8u8RIOgMgvnHJ9SpzynvFDfQAugijBLv6CgXDBT&0LzKMdI06BIf9OyKGd&U58kN19fV8colygXJWtcMNaqJP8=|eNodwdEKgjAUXDDQf&ELnLk57GnXJaiQq4do923YSuXqQKNgXx90zl4yxspE&TUhD21cMNVmqzQkKbdYGVQ6rfzrIy9+nEThYPBvhLU2bpezFs&YSw4H2xdEj+t4mzoVz8Rhuy&i1KTL4BCIx5mcd1tt7Bc16uT4A7goJkI=|eNodyN0KwiAUXDDgd9kb2CzGujoqyeaJFjmKc9fYMCGxkLWfpy&6Lr9UMsbLDP6qyGMdBZzOFRsmq3RYXYN8tW8kUQRdyJ7k4SNq2fntbJwP7QWQ5HOcSeQEKcd0TGzB3XXhY2&wV&6h7a27b17KGQImm9ZOpEhl+y9eOlwnaQ==|eNortjI0NLBScgQDz3yTfK98XCdHv3J3b9P80rwo54pwTy+DgkR3M3eXTMdAY6ekjChHD4PcFJ+KNIMg54Bko9IKxxC&XFyTQl+niqLc7NAkV6PIXCKjgFCD0FQTc4vSCuf0JP+SJIPcspKsKEdj48ys9CiXKBcla1wwr5gmBA==|eNortjI0sLBScgQDz3yTfK98XCdHp1KniMLwiNKglFxc71L3wqrAPEe3UF&PHMuq9BDPXDCflKTkkJDQCIM0s&B8rwxLR5co5ySXbJ9SY7dSH&+SyAqL7JQkV3cPX&NKc9OilKoU51ST&CQ&k6Ki0vIolygXJWtcMKhcMCZa|eNortjI0MLJScgQDz3yTfK98XCdHP5MoxySjJMfIFL&CEsuSUKNQv4LiSre8KKco56IUT3&L0CyfgMIox&IoXCevKFwns&R011THgMKsfLcoZ++MQo&0cNeyIPOqkPTIqrCqCstcMM+C8ChHz8goFyVrXDCmkyQg|eNortjI0NLJScgQDz3yTfK98XCdH&4z8yCin0szUgNwo54zkkBDTJB&TrIBA06S8XFxvr7SKyuDsKOeIZOPcsFA&&4woZ49UU&ekIKMq&7DURCOLimRjX9eKSmdDxxwXZ4&wjDT&lLDsJI&iqpB01yhcJ4v0KJcoFyVrXDA8ZVwnTQ==|eNortjI0MrBScgQDz3yTfK98XCdHLy&LSLfMyOxcIvfIioJit9Lc9NC04NK8NEvncHe&9Byv5MRwy8pC79ywgLT0SJ+qjORCC5PK0oh8i8yU0gpPR9PK7BJXn9SCxDznsEQXb7e8LLMCp+L8tMTyKJcoF7XUioLMotTi+Mw8WwMla1ww8SosXw==|eNortjI0NLRScgQDz3yTfK98XCdHr0pcJ+PAdP9sc+NcIvcyY4PEoNywyuyKzOQsC8twDx9Hg7TUkHyv7BDjMtPg3LwcjyinqlwiNxcXXCeXKFwn7wggEWmck59YHJhZ5Z4ZmF4R5eSfaFnkWuzpVFRglpxcXB7lEuWiZA1cMO+XJv4=|eNortjI0MLdScgQDz3yTfK98XCdHr7LgEpekEmO&xIBgo5CMoOSSKu&QDKPK5OziojS&&Bwvk&BK4yqLCFOjTNNcXC9Tz8C0jLzSkuCMYI88v8KIwORQi&TMQLM8i&B8Sy9Pl7QqXwt&gxQvrzLHKJcoFyVrXDCNviXB|eNortjI0NLRScgQDz3yTfK98XCdHn4pCp5yQxNIkM8MQ97SI0PLkoIqy9DJvZ3PXgPDwgKSIKKfwPKfi&CqvtAqTTNf0YMdwS8cM&yjH7Mr0omTTsLQqg&RcXLOK9Oz00LDgwijHCOeqyuC8KFwnf2fvSMcolygXJWtcMD&GXCfp|eNortjI0NLBScgQDz3yTfK98XCdHF6&gcEdTr5SiNO8KY1wnk1KLIE&&yowox+JcMB&XlGyzQH8&gwKvyIjyEMuyNI+ktMSQ7DDzdAsTA&fyKMckl&KS9HDDgNRKL0+jkCintLCStFwin+LcRC+PXFxcJ7+qwCiXKBcla1wwqjUmMg=='
if(regex.test(exg)) {
var matches = exg.match(regex);
for(var match in matches) {
alert(matches[match]);
}
} else {
alert("No matches found!");
}`
but my regex won't work whew can someone give me a right regex for it? :) please help..
Elias answer is probably the easiest way to do this but if you insist on regex then how about this:
var regex = /[a-zA-Z0-9\/-=&_+]+\|{0,1}/g
Explanation of your regex and why it doesn't work:
[a-zA-Z]+ // Match one or more a-z upper or lower case
[0-9]+ // *THEN* match one or more 0-9
[/-=&_]+ // *THEN* match one or more of these characters
| // *THEN* match a pipe
The problem here is that the letters, numbers and symbols in your search string are mixed together. Therefore they all need to go inside square brackets together so you match one or more of all of them together in any order. Yours puts them in a specific order, letters first, then numbers, then symbols.
The {0,1} on the end matches either zero or one pipe and will therefore catch the last match which does not have a pipe at the end.
Incidentely there's no such thing as JQuery regex. The regex functions are javascript.
erm... how about just using split like so marches = yourString.split('|');
this will return an array of strings, but the pipe char's will not be included, but just concat them to the substring if you need them.
You've missed a slash before |, so this may be what you want?
var regex = /[a-zA-Z0-9\/-=&_]+\|/g;

Categories