Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式从样式HTML标记中提取文本_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式从样式HTML标记中提取文本

JavaScript正则表达式从样式HTML标记中提取文本,javascript,regex,Javascript,Regex,我正在尝试JavaScript正则表达式来提取CSS HTML标记之间的所有文本: var rawHtml = "<style type='text/css'> div { color: red; } </style>"; //var rawHtml = "<style type=\"text/css\"> div { color: red; } </style>"; //var rawHtml = "<style> div {

我正在尝试JavaScript正则表达式来提取CSS HTML标记之间的所有文本:

 var rawHtml = "<style type='text/css'> div { color: red; } </style>";
 //var rawHtml = "<style type=\"text/css\"> div { color: red; } </style>";
 //var rawHtml = "<style> div { color: red; } </style>";
 var cssString = rawHtml.match(/<style[^>]*>(.+?)<\/style>/gi);
 console.log(cssString);
var rawHtml=“div{color:red;}”;
//var rawHtml=“div{color:red;}”;
//var rawHtml=“div{color:red;}”;
var cssString=rawHtml.match(/]*>(.+?)/gi);
console.log(cssString);

样式标记可以具有属性以及单引号或双引号。如何成功提取所有用例?我的正则表达式没有拾取它。

只需使用DOMParser即可:

constrawhtml=“div{color:red;}”;
const doc=new DOMParser().parseFromString(rawHTML,“text/html”);
常量匹配=[…doc.querySelectorAll('style')]
.map(style=>style.textContent);

console.log(匹配项)只需使用DOMParser即可:

constrawhtml=“div{color:red;}”;
const doc=new DOMParser().parseFromString(rawHTML,“text/html”);
常量匹配=[…doc.querySelectorAll('style')]
.map(style=>style.textContent);

console.log(匹配项)我认为代码中的主要问题是您将cssString设置为完全匹配,而不是括号中匹配的部分。你需要像这样的东西:

var innerHTML = cssString ? cssString[1] : ""; 
这里重要的一点是,正则表达式中的括号匹配-
(.+?)
-存储在backreference 1中,即存储在
cssString[1]
中,而不是存储在
cssString

不过,我也会做一些小改动,使您的正则表达式更加健壮:

/<style[^>]*>([^<]+)<\/style>/i

您将得到一个数组(cssstringaray),其中包含文档中每个
组中的css。

我认为代码中的主要问题是您将cssString设置为完全匹配,而不是括号中匹配的部分。你需要像这样的东西:

var innerHTML = cssString ? cssString[1] : ""; 
这里重要的一点是,正则表达式中的括号匹配-
(.+?)
-存储在backreference 1中,即存储在
cssString[1]
中,而不是存储在
cssString

不过,我也会做一些小改动,使您的正则表达式更加健壮:

/<style[^>]*>([^<]+)<\/style>/i

您将得到一个数组(cssStringArray),其中包含文档中每个
组中的css。

使用dom解析器更容易。不要将其解析为文本:通常不容易工作(例如,如果注释了呢?)。使用dom解析器更容易。不要将其解析为文本:通常不容易工作(例如,如果被评论了怎么办?)。这个答案对我理解我的问题非常有帮助。谢谢。这个答案对我理解我的问题非常有帮助。谢谢。