Javascript Regex格式 - 适用于PHP,而不适用于JS

时间:2018-02-17 15:33:07

标签: javascript regex

我试图在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中它没有。

知道我错过了什么?

感谢

劳伦

2 个答案:

答案 0 :(得分:1)

在JavaScript中,您将主要使用两种方法使用正则表达式:test和replace。 test只是告诉你它的参数是否与正则表达式匹配,而replace接受第二个参数:用于替换匹配文本的字符串。与大多数函数一样,replace生成一个新字符串作为返回值;它不会改变输入,例如;

&#13;
&#13;
document.write(/cats/i.test("Cats are fun. I like cats."));
&#13;
&#13;
&#13;  并替换:

&#13;
&#13;
document.write("Cats are fun. I like cats.".replace(/cats/gi,"dogs"));
&#13;
&#13;
&#13;

并且在Javascript中,你必须逃避关闭括号&#34;]&#34;如下;

&#13;
&#13;
\[([^\]\s]+).([^\]]+)\]
&#13;
&#13;
&#13;

答案 1 :(得分:1)

好的,这就是我解决它的方法。

var el = document.createElement( 'html' );
el.innerHTML = content;
all_links = el.getElementsByClassName("product__title");

内容需要包含您的HTML