我正在尝试制作一个浏览器操作,在“.com”(或其他任何TLD)和URL的“/foo.bar”部分之间插入一些文本。
例如,如果我在“stackoverflow.com/questions”,我希望能够在浏览器中按下按钮并自动重定向到“stackoverflow.com.my.text / questions”
按钮显示在正确的位置(看起来很漂亮),但什么也没做。
我在this example之后对代码进行了建模。这就是我目前所拥有的:
的manifest.json
{
"manifest_version": 2,
"name": "My Extension",
"version": "1.0",
"background": { "scripts": [ "insert.js" ] },
"browser_action": { "default_icon": "my_icon.png" },
"permissions": [ "tabs", "http://*/*", "https://*/*" ]
}
和insert.js
chrome.browserAction.onClicked.addListener(function(tab) {
var url = tab.url;
var tld = /\.\w+\//;
var url2 = tld.exec(url);
var break = url.indexOf(url2);
var break1 = break + url2[0].length - 1;
var url1 = url.substring(0, break1);
var url3 = url.substring(break1, url.length);
var mytext = ".my.text";
var urlNew = url1 + mytext + url3;
chrome.tabs.update(tab.id, {url: urlNew});
});
我可能遗漏了一些非常明显的东西,但我基本上都不了解JavaScript。
我通过修改http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_regexp_test2处的代码来测试脚本本身,所以我知道它匹配正确的正则表达式并吐出正确的字符串。
我搜了一会儿,找不到任何指导我的东西。为什么我发布的示例有效,但我的代码没有?
答案 0 :(得分:1)
如果您想学习任何内容,forget about w3schools.com并使用信誉良好的来源,例如MDN。
在看了你的代码之后,我已经看到了一个明显的错误:
var url = tab.url;
var tld = /\.\w+\//;
var url2 = tld.exec(url);
var break = url.indexOf(url2);
regex's exec method会返回一个数组(如果找不到匹配项,则返回null
)
string's indexOf method需要一个字符串。这些论点不匹配,因此您获得的结果可能与您的预期不符。
我正在尝试制作一个浏览器操作,在“.com”(或其他任何TLD)和URL的“/foo.bar”部分之间插入一些文本。
chrome.browserAction.onClicked.addListener(function(tab) {
var url = tab.url;
var urlNew = url.replace(/(\.\w+)(\/)/, '$1.my.text$2');
chrome.tabs.update(tab.id, {url: urlNew});
});
“$ 1”与捕获的群组\.\w+
匹配,
“$ 2”与捕获的组\/
匹配。
注意:\w+
匹配[a-zA-Z0-9_]+
,而TLD也可以包含连字符(“ - ”)(请参阅https://data.iana.org/TLD/tlds-alpha-by-domain.txt)。如果您想匹配这些网址,也可以调整常规表现。