我正在尝试匹配<div>
中包含的字符串
问题是我需要忽略div中任何子元素内的任何内容,我似乎无法将其与我需要它的方式相匹配。
我必须在正则表达式中保留3部分格式,即/^()(.*?)()$/
其中
()
与左侧匹配(.*?)
匹配我想要的区域
捕获()
与右侧匹配。左右两侧是起点和终点。
假设我有这个HTML:
<div class="some stuff">Could Be Anything<span class="specifics">Huge</span></div>
现在我需要拔出&#34;可能是任何东西&#34;来自HTML示例,没有&#34;巨大&#34;来自子元素。遵循3部分规则。
注意: <div
没有任何子元素..它可能只是文本(我想要的)或文本和子元素
我的尝试是/^(>)(.*?)(<span)$/
,但这不起作用,我也不知道从哪里开始。任何帮助将不胜感激!
更清楚地了解我要做的事情。
我正在尝试从网页上返回一些体育统计数据。我使用kimonolabs来抓一个网页。我试图刮擦的元素是一张桌子。这包含一个内部有一些文本。和服使用css选择器来知道要从哪个元素中提取。然后regex是一个过滤其他任何东西的选项。所以现在如果div里面有另一个元素,它会返回那些元素文本,即文本,但我不想要
答案 0 :(得分:2)
对于这种字符串:
<div class="some stuff">Could Be Anything<span class="specifics">Huge</span></div>
以下正则表达式将删除标记之间的第一个文本:
/(>)(.*?)(<)/
1st Capturing group (>)
> matches the characters > literally
2nd Capturing group (.*?)
.*? matches any character (except newline)
Quantifier: *? Between zero and unlimited times, as few times as possible, expanding as needed [lazy]
3rd Capturing group (<)
< matches the characters < literally
以上示例的一个匹配项:
1. [23-24] `>`
2. [24-41] `Could Be Anything`
3. [41-42] `<`
请注意,应该没有修饰符,特别是没有全局 g 修饰符。
以下是匹配的屏幕截图,来源https://www.regex101.com/:
答案 1 :(得分:2)
<强>更新强>
特定的O.P。问题的解决方案是以下正则表达式:
/(^)([^<]*)(<span)/i
此问题可以忽略最后一个标志。
这假设它与<div>
标记内的内容匹配。
如果HTML代码过于复杂/生病,这就是我提出的正则表达式:
/<div(?:\s*[a-z_\-]+(?:=(?:"[^"]*"|'[^']*'|[^>]+))?)*>([^<]+)<span/i
这太复杂了。
这适用于格式错误的代码。
它可以根据需要运行:将数据保存在<div>
内但在<span>
之前。
您可以在此处测试并检查它:https://regex101.com/r/tT1xM4/1
<强>声明强>
Altough我制作了这个正则表达式,正则表达式不是正确的工具!
不要使用这种复杂数据的注释!
我不保证这适用于所有和任何可能的任意HTML代码
我小心翼翼地支持像<div class=">" get-data="" seg=">" test>eyhrtfu<span>
这样的丑陋代码(正确匹配eyhrtfu
),但这不是一个完美的解决方案。
如果您想要一个完美的解决方案,请使用jQuery / document.querySelectorAll / Prototype或phpQuery或其他解析技术。