使用正则表达式在字符串中查找标签之间的句子?

时间:2017-04-03 10:55:44

标签: javascript jquery html string

我需要使用正则表达式<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,'');
});

4 个答案:

答案 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>标记内不会有其他标记。