使用 Tampermonkey 的后视正则表达式的 Safari 替代品
Safari alternative for lookbehind regex with Tampermonkey
我正在尝试使我在 Chrome 中使用的脚本适用于 safari。它使用 lookbehind 正则表达式来跳过页面,但是 Safari doesn't support that。它识别亚马逊 ASIN 并将 link.
放在一起
这是我在网上某处找到的原始代码;
// ==UserScript==
// @name PartAlert
// @namespace http://tampermonkey.net/
// @version 1.1
// @description try to take over the world!
// @author You
// @match https://partalert.net/*
// @icon https://www.google.com/s2/favicons?domain=partalert.net
// @grant none
// ==/UserScript==
(function() {
'use strict';
var url = window.location.href;
var regexAsin= RegExp("(?<=asin=)(.+)(?=&price)");
var regexCountry= RegExp("(?<=tld=.)(.+)");
var mAsin = url.match(regexAsin);
var mCountry = url.match(regexCountry);
var finalSite = "https://www.amazon."+ mCountry[0]+ "/dp/" + mAsin[0] + "?tag=test";
// window.location.href = finalSite;
window.location.href = finalSite + "&psc=1&aod=1&condition=all"
})();
我尝试按照 ;
中的建议替换 lookbehind 正则表达式
var regexAsin= RegExp("(?:asin=)(.+)(?=&price)");
var regexCountry= RegExp("(?:tld=.)(.+)");
但是当我替换它们时 URL 变得混乱并且在扩展之前会有 tld=
。
要测试此脚本,您可以使用 url,例如 this one。
这就是我在上面的评论中的意思:
// ==UserScript==
// @name PartAlert
// @namespace http://tampermonkey.net/
// @version 1.1
// @description try to take over the world!
// @author You
// @match https://partalert.net/*
// @icon https://www.google.com/s2/favicons?domain=partalert.net
// @grant none
// ==/UserScript==
(function() {
'use strict';
var url = window.location.href;
var regexAsin = RegExp("asin=[^&]+"); // matches 'asin=' followed by one or more characters excluding '&' (which would indicate the beginning of the next URL param)
var regexCountry = RegExp("tld=[^&]+"); // matches 'tld=' followed by one or more characters excluding '&' (which would indicate the beginning of the next URL param)
var mAsin = url.match(regexAsin)[0];
var mCountry = url.match(regexCountry)[0];
var finalSite = "https://www.amazon." + mCountry.slice(5) + "/dp/" + mAsin.slice(5) + "?tag=test";
window.location.href = finalSite + "&psc=1&aod=1&condition=all"
})();
假设 URL 是 https://partalert.net/product.js?asin=B08H93GKNJ&price=%C2%A3335.73&smid=A3P5ROKL5A1OLE&tag=partalert-21×tamp=07%3A22%20UTC%20%2826.4.2021%29&title=Xbox%20Series%20X&tld=.co.uk
;那么 mAsyn
将是 'asin=B08H93GKNJ'
而 mCountry
将是 'tld=.co.uk'
。使用 slice(5)
你会得到两个没有 asin=
和 tld=.
位的字符串。
换句话说,不是试图直接捕获 URL 参数值('B08H93GKNJ'
和 'co.uk'
),而是首先捕获整个 'key=value'
子字符串和在第二步中删除 'key='
部分。
P.S。由于您的原始代码没有检查 mAsin
和 mCountry
是否已定义且不是空字符串,因此我也没有插入它们,但您可能需要考虑实施这些检查。
我正在尝试使我在 Chrome 中使用的脚本适用于 safari。它使用 lookbehind 正则表达式来跳过页面,但是 Safari doesn't support that。它识别亚马逊 ASIN 并将 link.
放在一起这是我在网上某处找到的原始代码;
// ==UserScript==
// @name PartAlert
// @namespace http://tampermonkey.net/
// @version 1.1
// @description try to take over the world!
// @author You
// @match https://partalert.net/*
// @icon https://www.google.com/s2/favicons?domain=partalert.net
// @grant none
// ==/UserScript==
(function() {
'use strict';
var url = window.location.href;
var regexAsin= RegExp("(?<=asin=)(.+)(?=&price)");
var regexCountry= RegExp("(?<=tld=.)(.+)");
var mAsin = url.match(regexAsin);
var mCountry = url.match(regexCountry);
var finalSite = "https://www.amazon."+ mCountry[0]+ "/dp/" + mAsin[0] + "?tag=test";
// window.location.href = finalSite;
window.location.href = finalSite + "&psc=1&aod=1&condition=all"
})();
我尝试按照
var regexAsin= RegExp("(?:asin=)(.+)(?=&price)");
var regexCountry= RegExp("(?:tld=.)(.+)");
但是当我替换它们时 URL 变得混乱并且在扩展之前会有 tld=
。
要测试此脚本,您可以使用 url,例如 this one。
这就是我在上面的评论中的意思:
// ==UserScript==
// @name PartAlert
// @namespace http://tampermonkey.net/
// @version 1.1
// @description try to take over the world!
// @author You
// @match https://partalert.net/*
// @icon https://www.google.com/s2/favicons?domain=partalert.net
// @grant none
// ==/UserScript==
(function() {
'use strict';
var url = window.location.href;
var regexAsin = RegExp("asin=[^&]+"); // matches 'asin=' followed by one or more characters excluding '&' (which would indicate the beginning of the next URL param)
var regexCountry = RegExp("tld=[^&]+"); // matches 'tld=' followed by one or more characters excluding '&' (which would indicate the beginning of the next URL param)
var mAsin = url.match(regexAsin)[0];
var mCountry = url.match(regexCountry)[0];
var finalSite = "https://www.amazon." + mCountry.slice(5) + "/dp/" + mAsin.slice(5) + "?tag=test";
window.location.href = finalSite + "&psc=1&aod=1&condition=all"
})();
假设 URL 是 https://partalert.net/product.js?asin=B08H93GKNJ&price=%C2%A3335.73&smid=A3P5ROKL5A1OLE&tag=partalert-21×tamp=07%3A22%20UTC%20%2826.4.2021%29&title=Xbox%20Series%20X&tld=.co.uk
;那么 mAsyn
将是 'asin=B08H93GKNJ'
而 mCountry
将是 'tld=.co.uk'
。使用 slice(5)
你会得到两个没有 asin=
和 tld=.
位的字符串。
换句话说,不是试图直接捕获 URL 参数值('B08H93GKNJ'
和 'co.uk'
),而是首先捕获整个 'key=value'
子字符串和在第二步中删除 'key='
部分。
P.S。由于您的原始代码没有检查 mAsin
和 mCountry
是否已定义且不是空字符串,因此我也没有插入它们,但您可能需要考虑实施这些检查。