I have a string like .hello-world-chat-size {height: 350px !important;}
and I want to extract the value of height
attribute i.e 350
. I tried this regex /^height\:(.*)$/gm
but cant get any result.
Asked
Active
Viewed 952 times
1

iamsaksham
- 2,879
- 4
- 26
- 50
-
Because `^` matches the start of string and `$` matches the end of string. You can just use `/height:\s*(\d+)px/`, or anything similar. – Wiktor Stribiżew Jul 15 '16 at 14:02
-
1out of curiosity, if you want an attribute of an element, why not just grab that instead of regex a string? (offsetHeight or clientHeight http://stackoverflow.com/questions/15615552/get-div-height-with-plain-javascript) – Nikki9696 Jul 15 '16 at 14:03
-
1@Nikki9696 I have extracted the above string using `getElementsByTagName().innerHTML` so it is a string – iamsaksham Jul 15 '16 at 14:05
-
1It's usually better to use the DOM if you can, and you do have the element in the DOM if you used getElementsByTagName. Just a suggestion. Happy Friday! =) "Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems." https://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/ – Nikki9696 Jul 15 '16 at 14:11
-
Yah,, U are correct. I'll research getElementsByTagName a bit and will try to eliminate the regex. – iamsaksham Jul 15 '16 at 14:23
1 Answers
1
The issue occurs because ^
matches the start of string and $
matches the end of string. Actually, (.*)$
matches the whole rest of the line, but since the beginning of the pattern did not match, there was no match at all. You can just use
/height:\s*(\d+)px/
or
/height:\s*(\d+)/
See the regex demo
Details:
height:
- a literal substringheight:
\s*
- zero or more whitespace symbols(\d+)
- 1 or more digitspx
- a literal stringpx
(actually, it is redundant, but just in case you might have other value withoutpx
, you might keep it to be as explicit as can be)
JS demo:
var re = /height:\s*(\d+)px/;
var str = '.hello-world-chat-size {height: 350px !important;}';
var m = str.match(re);
if (m) {
console.log(m[1]);
}

Wiktor Stribiżew
- 607,720
- 39
- 448
- 563
-
-
That is a bit different, what do you want to extract from it? `123`? A mere `/width:(\d+)/` will do. Add more context for a safer match. Say, you can add `{`: `/{width:(\d+)/`. Or if there can be whitespaces: `/{\s*width\s*:\s*(\d+)/` – Wiktor Stribiżew Jul 15 '16 at 14:34