我需要使用正则表达式在<p class="test" style="color:red">Hello world!</p>
之类的标签之间获取句子。
标签的属性可能与<p class="classname" style="color:blue">Hello world!</p>
我有这样的代码
var result = elements.match(/<p>(.*?)<\/p>/g).map(function(val1){
return val1.replace(/<\/?p>/g,'');
});
答案 0 :(得分:1)
使用DOM而不是正则表达式。您可以使用jquery解析字符串并获取目标元素的文本。使用jQuery.parseHTML()
将字符串解析为DOM或仅使用jQuery()
。
var html = '<p class="test" style="color:red">Hello world!</p>';
console.log($(html).text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:0)
您可以使用
执行此操作
function findPText(str, tag) {
if (tag === void 0) {
tag = "p";
}
var fullMatch = new RegExp('\<' + tag + '.*?<\\/' + tag + '>', 'ig').exec(str);
var startMatch = new RegExp('\<' + tag + '.*?>', 'ig');
var endMatch = new RegExp('\<\/' + tag + '\s*>', 'ig');
var matches = [];
for (var index = 0; index < fullMatch.length; index++) {
var a = fullMatch[index];
matches.push(a.replace(startMatch, '').replace(endMatch, ""));
}
return matches;
}
var str = '<h1 class="test" style="color:red">Hello world</h1>bob<p class="test" style="color:red">Hello World!</p>bob';
console.log(findPText(str, "h1"));
console.log(findPText(str, "p"));
或将其渲染为DOM:
function findPText(str, tag) {
if (tag === void 0) {
tag = "p";
}
var myNode = document.createElement("body");
myNode.innerHTML = str;
var tags = myNode.querySelectorAll(tag);
var matches = [];
for (var index = 0; index < tags.length; index++) {
var element = tags[index];
matches.push(element.textContent);
}
return matches;
}
var str = '<h1 class="test" style="color:red">Hello <b>world</b></h1>bob<p class="test" style="color:red">Hello World!</p>bob';
console.log(findPText(str, "h1"), findPText(str, "p"));
答案 2 :(得分:0)
我希望下面的正则表达式适合你。如果有,请告诉我。
var result = elements.match(/<p(.*?)<\/p>/g).map(function (val1) {
return val1.replace(/<\/?p.*?>/g, '');
});
。*? - &GT;匹配标记元素中的所有字符(属性属性)。
如果元素块中有多个标签,则会返回文本数组。您可以使用索引
访问它们答案 3 :(得分:-1)
你可以尝试这样的方法来获取<p>
标签内的文字,具体取决于标签的格式:
var el = '<p class="test" style="color:red">Hello world!</p>';
var re = /<p class=".*?" style="color:.*?">(.*?)<\/p>/g;
result = re.exec(el);
console.log(result[1]);
如果您不知道自己将在<p>
标记内获得什么,则可以执行以下操作:
var el = '<p class="test" style="color:red">Hello world!</p>';
var re = /<p .*?>(.*?)<\/p>/g;
result = re.exec(el);
console.log(result[1]);
当然,这假设<p>
标记内不会有其他标记。