仅使用正则表达式分组首次比赛

时间:2018-06-28 03:26:34

标签: javascript regex

我正在尝试仅这样匹配首次出现 假设我们有2个div:

<div>
  <span class="time">2016</span>
</div>
<div>
  <span class="time">2017</span>
  <span class="time">2018</span>
</div>

我想得到 2016年 2017

由于第二个div有2个,所以它只会得到第一个,依此类推,下面是一个使它更简单的示例。

示例

https://regexr.com/3rma6

如何仅在此url中匹配首个日期?我应该在正则表达式中添加些什么 有可能吗?

3 个答案:

答案 0 :(得分:0)

这里是链接中的架构之一。它找到<div>,然后跳过所有<span>|<dl>|<dt>|<\span>|<\dl>|<\dt>,然后匹配第一个<dd>。如果有多行<span>,则可能不起作用。如果任何<div>缺少<dd>,也可能会中断,但前提是<dd>可以存在于<div>之外。如果<span>, <dl>, or <dt>可以有孩子,它也会中断。这些问题可能有解决方法,但实际上取决于您有多急。

<\s*div\s+[^>]+>\s*(?:<\s*dt\s+[^>]+>\s*|<\s*dl\s+[^>]+>\s*|<\/\s*dl\s*>\s*|<\s*span\s*>[^<]+<\/\s*span\s*>\s*|<\/\s*dt\s*>\s*)+<\s*dd\s+class\s*=\s*"r-time"\s*>([^<]*)<\/\s*dd\s*>\s*

答案 1 :(得分:0)

let input = `<dt class="buyer-feedback">

<span>Всё как описывал продавец,  доставка до 
города Калининграда долгая!</span>

</dt>

<dd class="r-time">21 Apr 2018 23:37</dd>
                </dl>

<div class="f-additional-title" data-spm- 
anchor- 
id="0.0.0.i1.5dc4OM5cOM5coS">Additional 
Feedback </div>
                <dl class="buyer-additional- 
review">

<dt class="buyer-addition-feedback"></dt>
<dd class="r-time" id="0.0.0.i4.5dc4OM5cOM5coS">22 Apr 2018 08:19
</dd>
                </dl>

</div>`;
let s = input.match(/(?<=<\/dt>\n*\s*<dd.*>).*(?=\s*\n*<\/dd>)/g);
console.log(s);

尝试一下

此正则表达式的作用是检查它是否在dt的结束标记之后加上元素dd。

let input = `<dt class="buyer-feedback">

<span>Всё как описывал продавец,  доставка до 
города Калининграда долгая!</span>

</dt>

<dd class="r-time">21 Apr 2018 23:37</dd>
                </dl>

<div class="f-additional-title" data-spm- 
anchor- 
id="0.0.0.i1.5dc4OM5cOM5coS">Additional 
Feedback </div>
                <dl class="buyer-additional- 
review">

<dt class="buyer-addition-feedback"></dt>

<dd class="r-time" data-spm-anchor- 
id="0.0.0.i4.5dc4OM5cOM5coS">22 Apr 2018 
08:19</dd>
                </dl>

</div>`;
let s = input.match(/(?<=<\/dt>\n*\s*<dd.*>).*(?=<\/dd>)/g);

输出= [“ 2018年4月21日23:37”,“ 2018年4月22日     08:19“]

答案 2 :(得分:0)

$(document).ready(function(){
$('div').each(function(){
console.log($(this).children("span:first").text())
})
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <span class="time">2016</span>
</div>
<div>
  <span class="time">2017</span>
  <span class="time">2018</span>
</div>
<div>
  <span class="time">2019</span>
  <span class="time">2020</span>
</div>
<div>
  <span class="time">2021</span>
  <span class="time">2022</span>
</div>
<div>
  <span class="time">2023</span>
  <span class="time">2024</span> 
  <span class="time">2025</span>
</div>