我一直在为Greasemonkey编写这个脚本。问题是.tolowercase()显然它将大小写为小写,这会打破URL。我已经研究过.startswith()和.endswith()作为可能的解决方案,例如以http和https开头;也许前缀检测一些'http *'?无论如何,这是下面的代码,提前感谢:
// ==UserScript==
// @name twitter intent
// @namespace random
// @description twitter intent popupwindow text replace
// @include https://twitter.com/intent/*
// @version 1
// @grant none
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js
// ==/UserScript==
$('#status').each(function() {
var text = $(this).text();
$(this).text(text.toLowerCase()
.replace('... ', ' ... ')
.replace('health ', '#health ')
.replace('video', 'Video')
.replace('emergency', '#emergency')
.replace('climate change', '#climatechange')
.replace('climate ', '#climate ')
);
});
这是在代码运行之前的HTML。
<textarea id="status" name="status" required="" autofocus="" aria-required="true" aria-describedby="post-error char-count">EPA shuts down program helping states adjust to climate change http://hill.cm/FH2iWpq</textarea>
编辑:重要的是,除了网址之外的文字是大写或小写被忽略但仍然.replace文本,如果检测到自己的单词。
答案 0 :(得分:1)
尝试将文本解析为网址,如果有效,请不要小写:
你可以看到它在我制作的小提琴中起作用 - Updated codepen。
text = text.split(' ');
text.forEach(function (value, index) {
try {
var url = new URL(value);
} catch (ex) {
text[index] = value.toLowerCase();
}
});
text = text.join(' ');
答案 1 :(得分:1)
所以我尝试过放置位置,网址和重新附加它的组合。
最终结果如下:
$('#status').each(function() {
var text = $(this).text();
var n = text.indexOf('http');
var url = text.match('http(s?):\/\/[^<\s]*');
if(url){
text = text.replace(url[0],'')
}
text = text.toLowerCase()
.replace('... ', ' ... ')
.replace('health ', '#health ')
.replace('video', 'Video')
.replace('emergency', '#emergency')
.replace('climate change', '#climatechange')
.replace('climate ', '#climate ')
if(url){
text = text.slice(0,n) + url[0] + text.slice(n);
}
$(this).text(text);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="status" name="status" required="" autofocus="" aria-required="true" aria-describedby="post-error char-count">EPA shuts down program helping states adjust to climate change http://hill.cm/FH2iWpq</textarea>
答案 2 :(得分:0)
为什么不能使用正则表达式查找某些字符串是从 <key>UIApplicationShortcutItems</key>
<array>
<dict>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeHome</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Home</string>
<key>UIApplicationShortcutItemType</key>
<string>com.emmetarries.Tabbed-Test.home</string>
</dict>
<dict>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeLatest</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Latest Photo</string>
<key>UIApplicationShortcutItemType</key>
<string>com.emmetarries.Tabbed-Test.latestPhoto</string>
</dict>
</array>
还是https://
开始,然后不要在其上应用http://
。
toLowerCase
因此,您可以创建一个函数来检查字符串是否为URL,然后对非URL字符串执行const regex = /^(https:\/\/)/g;
const str = `https://www.FaceBook.com`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
。
如果您正在寻找,请告诉我。
OP显示一些代码
后更新我仍然相信正则表达式是你的解决方案
这是更新后的代码段
toLowerCase
正如您所看到的,除了URL之外,所有内容都是小写的。
答案 3 :(得分:0)
var dictionary1= {
" A":" b",
" B":" b",
" C":" C",
};
jQuery(document).ready(function() {
setTimeout(function() {
$("#status").each( function(){
for( var ptrn in dictionary1){
$(this).text( $(this).text().replace(new RegExp(ptrn ,"g"), dictionary1[ptrn] ) );
}
});
}, 100);
});