我试图在JS中使用正则表达式,但我可能会遗漏一些东西,因为我无法让它工作。我有几个正则表达式在PHP中工作正常(与preg_match一起使用)但是当我在JS中使用完全相同的表达式时,我得不到匹配的模式。
这是一个例子,我试图解析页面:
https://www.coolblue.be/fr/rechercher?query=GTX+1060&trier=prix-les-moins-chers
我的代码:
var pattern = '/<a class=\"product__title js-product-title\" href=\"(.*)\" data-trackclickevent=\"(.*)\">[\n\r\s]+(.*)[\n\r\s]+<\/a>/gi';
var found = content.match(pattern);
变量内容包含页面的完整源代码,我已将其转储到控制台中以确保它正常工作,我看到例如:(代码很脏,但我从上面提到的页面中取出它而不改变任何东西)
<div class="product__titles"><div class="js-product-feature-title"></div><a class="product__title js-product-title" href="/fr/produit/654109" data-trackclickevent="Internal Search, Product, Oehlbach BTX 1000 (654109) - Product title">
Oehlbach BTX 1000
</a></div><div class="product__review-rating"><div class="review-rating alt-compact"><div class="review-rating--rating">
当我使用https://regex101.com/来测试我的正则表达式时,它也可以工作但不知何故在JS中它没有。
知道我错过了什么?
感谢
劳伦
答案 0 :(得分:1)
在JavaScript中,您将主要使用两种方法使用正则表达式:test和replace。 test只是告诉你它的参数是否与正则表达式匹配,而replace接受第二个参数:用于替换匹配文本的字符串。与大多数函数一样,replace生成一个新字符串作为返回值;它不会改变输入,例如;
document.write(/cats/i.test("Cats are fun. I like cats."));
&#13;
document.write("Cats are fun. I like cats.".replace(/cats/gi,"dogs"));
&#13;
并且在Javascript中,你必须逃避关闭括号&#34;]&#34;如下;
\[([^\]\s]+).([^\]]+)\]
&#13;
答案 1 :(得分:1)
好的,这就是我解决它的方法。
var el = document.createElement( 'html' );
el.innerHTML = content;
all_links = el.getElementsByClassName("product__title");
内容需要包含您的HTML