在两个单词之间提取一个单词javascript

时间:2017-12-30 06:24:27

标签: javascript imacros

我这里有这样的文字

<div class="listing-details" style="outline: 1px solid blue;">
    <meta itemprop="startDate" content="2016-04-11T18:30:00.000Z">
    <span class="keypoint" title="old" style="outline: 1px solid blue;">
        <span>2 - 3 years old</span></span>
    <span class="keypoint" title="Bathrooms" style="outline: 1px solid blue;">
        <span>1 Bathrooms</span></span>
    <span class="keypoint" title="floor" style="outline: 1px solid blue;">
        <span>1<sup>st</sup>floor</span></span>
</div>

我想从<span>行中</span><span>2 - 3 years old</span>之间提取一个单词所以我试过

TAG POS=1 TYPE=div ATTR=class:listing-details EXTRACT=HTM
SET txt1 {{!EXTRACT}}
SET a EVAL("var b='{{txt1}}';var c=b.split('<span>').pop().split('</span>').shift();c;")
PROMPT {{a}}

但是这给了我1<sup>st</sup>floor的输出结果,来自本文<span>1<sup>st</sup>floor</span> 我知道哪里出错了?

由于

DOMNICK。

2 个答案:

答案 0 :(得分:1)

我不熟悉iMacros,但我认为当你点击EVAL时,你要做的第一件事就是分配

'<meta ...><span class="keypoint" ...><span>2 - 3 years old</span></span><span class="keypoint" ...><span>1 Bathrooms</span></span><span class="keypoint" ...><span>1<sup>st</sup>floor</span></span>'

b。在这种情况下,让我们来看看

b.split('<span>').pop().split('</span>').shift();

正在做。

<强> split('<span>')

将字符串拆分为'<span>'的每个实例的数组。现在你正在

上运作
[
  '<meta ...><span class="keypoint" ...>',
  '2 - 3 years old</span></span><span class="keypoint" ...>',
  '1 Bathrooms</span></span><span class="keypoint" ...>',
  '1<sup>st</sup>floor</span></span>'
]

<强> pop()

删除数组的最后一个元素并返回它。现在你正在

上运作
'1<sup>st</sup>floor</span></span>'

你丢失了你关心的文字。

如何解决

由于您已经表明愿意对HTML执行字符串操作,因此您也可以使用正则表达式。您只需抓取第一个'<span>'和第一个</span>之间的文字

即可
var c = b.match(/<span>(.*?)<\/span>/)[1];

b.matchb内搜索文字<span>,然后根据需要匹配尽可能多的字符,然后才能找到</span>。它返回一个包含两个元素的数组:正则表达式匹配的完整字符串,以及括号中的部分。你只关心括号中的部分,所以我们只使用数组中的那个元素。

关于HTML和正则表达式的强制性警告:

  

这不适用于一般情况和MAY SUMMON ZALGO

HTML过于复杂,无法在每种情况下都可靠地处理正则表达式。但是,如果您的HTML受到足够的限制,以至于您知道通过正则表达式发送的每个字符串将如何构建,那么您应该没问题。

答案 1 :(得分:1)

如果您在浏览器环境中,那么您可以在纯JavaScript中执行此操作。

&#13;
&#13;
let str="<div class=\"listing-details\" style=\"outline: 1px solid blue;\"><meta itemprop=\"startDate\" content=\"2016-04-11T18:30:00.000Z\"><span class=\"keypoint\" title=\"old\" style=\"outline: 1px solid blue;\"><span>2 - 3 years old</span></span><span class=\"keypoint\" title=\"Bathrooms\" style=\"outline: 1px solid blue;\"><span>1 Bathrooms</span></span><span class=\"keypoint\" title=\"floor\" style=\"outline: 1px solid blue;\"><span>1<sup>st</sup>floor</span></span></div>";

let myDiv=document.createElement('div');
myDiv.innerHTML=str;
let spans=myDiv.querySelectorAll('.keypoint>span');
let arr=[];
spans.forEach(span=>{arr.push(span.innerText)});
console.log(arr);
&#13;
&#13;
&#13;