Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
前為了把瀏覽器書簽放到博客里維護,特意寫了一個 bookmark 轉 json/markdown 的小工具:parse-bookmark。
前幾天手賤直接把 bookmark 的源文件給刪了,這下這么多年收藏整理的書簽只有自己博客里的一個 markdown 文件了,畢竟還是直接用瀏覽器自帶的 bookmark 查看會方便好多,只能想辦法怎么根據現在的 markdowm 文件轉換回 bookmark.html 文件了。
markdown 文件長這樣:
# 我的書簽bookmark
### 博客
* [我的博客](https://cafehaus.github.io/blog)
* [知乎](https://zhuanlan.zhihu.com/)
* [簡書](https://www.jianshu.com/)
### 工具
* [在線圖片壓縮](https://tinyjpg.com/)
* [TinyPNG – Developer API](https://tinypng.com/developers)
* [在線GIF動圖壓縮](https://docsmall.com/gif-compress)
...
從谷歌瀏覽器中導出的書簽長這樣:
<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
It will be read and overwritten.
DO NOT EDIT! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>
<DL><p>
<DT><H3 ADD_DATE="1691296878" LAST_MODIFIED="1692859249" PERSONAL_TOOLBAR_FOLDER="true">書簽欄</H3>
<DL><p>
<DT><H3 ADD_DATE="1692858364" LAST_MODIFIED="1692858643">博客</H3>
<DL><p>
<DT><A HREF="https://cafehaus.github.io/blog">我的博客</A>
<DT><A HREF="https://zhuanlan.zhihu.com/">知乎</A>
<DT><A HREF="https://www.jianshu.com/">簡書</A>
</DL><p>
<DT><H3 ADD_DATE="1692858766" LAST_MODIFIED="1692859444">工具</H3>
<DL><p>
<DT><A HREF="https://tinyjpg.com/" ADD_DATE="1692858571">在線圖片壓縮]</A>
<DT><A HREF="https://tinypng.com/developers" ADD_DATE="1692858571">TinyPNG – Developer API</A>
<DT><A HREF="https://docsmall.com/gif-compress" ADD_DATE="1692858571">在線GIF動圖壓縮</A>
</DL><p>
</DL><p>
</DL><p>
所以現在需要做的就是怎么能更快速地從上面的 markdown 文件轉換成下面的 html 格式文件,注意這里的 html 文件和我們平時前端開發里寫的 html 還有點不太一樣。
轉換步驟:
剛開始本來是打算自己手動一個一個復制過來修改的,先把主要內容和格式搞過來,這一步完成后大概長這樣,大部分工作都是復制粘貼,還算比較輕松:
<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
It will be read and overwritten.
DO NOT EDIT! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>
<DL><p>
<DT><H3 ADD_DATE="1691296878" LAST_MODIFIED="1692859249" PERSONAL_TOOLBAR_FOLDER="true">書簽欄</H3>
<DL><p>
<DT><H3 ADD_DATE="1692858364" LAST_MODIFIED="1692858643">博客</H3>
<DL><p>
* [我的博客](https://cafehaus.github.io/blog/)
* [知乎](https://zhuanlan.zhihu.com/)
* [簡書](https://www.jianshu.com/)
</DL><p>
</DL><p>
</DL><p>
這一步直接用開發工具的全局替換就行了,將 * [ 替換成 DT 和 A 標簽,A 標簽的 HREF 屬性先默認為空,等后面再處理:
<!DOCTYPE NETSCAPE-Bookmark-file-1>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>
<DL><p>
<DT><H3 ADD_DATE="1691296878" LAST_MODIFIED="1692859249" PERSONAL_TOOLBAR_FOLDER="true">書簽欄</H3>
<DL><p>
<DT><H3 ADD_DATE="1692858364" LAST_MODIFIED="1692858643">博客</H3>
<DL><p>
<DT><A HREF="">我的博客](https://cafehaus.github.io/blog/)
<DT><A HREF="">知乎](https://zhuanlan.zhihu.com/)
<DT><A HREF="">簡書](https://www.jianshu.com/)
</DL><p>
</DL><p>
</DL><p>
剛開始我也是自己一個一個手動先選中 ctrl x 剪切掉后面的地址,然后粘貼到前面的 HREF 里,大概剪切粘貼了1/3實在覺得這樣效率太慢了,也沒心思再剪切粘貼了。
然后就開始來寫個腳本直接用正則替換內容,無非就是用正則匹配出來后面的地址然后放到 HREF 里去:
const fs = require('node:fs')
const path = require('node:path')
fs.readFile(path.join(__dirname, './bookmarks_2023_8_24.html'), 'utf-8', async (err, data) => {
if (err) return console.error(err)
const reg = /<DT><A HREF="">([A-Za-z0-9\u4e00-\u9fa5.-–-—+_~:·,!?#??’'??:、,;。!|【】\[\]\$¥\(\)()「」&《》\s ?]*)\]\((http\S+)\)<\/A>/g
const text = data.replaceAll(reg, '<DT><A HREF="$2">$1</A>')
fs.writeFile(path.join(__dirname, './bookmarks.html'), text, (err, data) => {
if (err) return console.error(err)
console.log('success')
})
})
總共也就 13 行代碼就搞定了,果然科技才是第一生產力,幾個小時的手工活用代碼1秒鐘搞定!
注意因為轉換的數據里沒有設置 icon 這個屬性,所以默認在書簽里打開前面的圖標默認都是灰色的,只要訪問當前書簽后,瀏覽器會自動更新前面的小 icon 的。
js中,我們經常會需要將某些字符串替換成指定的字符串,這是可以使用`replace()`方法,它不僅支持使用字符串替換,還能用正則替換
/**
* @param regexp/substr 被替換的字符串或 RegExp 對象,如果該值是一個字符串,則將它作為要檢索的直接量文本模式,而不是首先被轉換為 RegExp 對象
* @param replacement 替換文本或生成替換文本的函數
* @return 一個新的字符串,是用 replacement 替換了 regexp 的第一次匹配或所有匹配之后得到的
**/
stringObject.replace(regexp/substr,replacement)
如果第一個參數是一個正則,就會查找與 regexp 相匹配的子字符串,然后用 `replacement` 來替換這些子串。如果 `regexp` 具有全局標志 g,那么 `replace()` 方法將替換所有匹配的子串。否則,它只替換第一個匹配子串。如果`replacement`是一個函數,那么這個函數的返回值就會作為替換文本。如果`replacement`是一個字符串,那么字符串中的$字符是有特殊含義的:
、、...、 與 regexp 中的第 1 到第 99 個子表達式相匹配的文本
$& 與 regexp 相匹配的子串
$` 位于匹配子串左側的文本
$' 位于匹配子串右側的文本
$$ 直接量符號
1. 把'Jack'替換成'World'
var str="Hello Jack!"
str.replace(/Jack/, "World") // Hello World
2. 使用正則全局替換,把所有的'COVID-19'替換成'XXX'
var str = "People with COVID-19 have had a wide range of symptoms reported – ranging from mild symptoms to severe illness. Symptoms may appear 2-14 days after exposure to the virus. People with these symptoms may have COVID-19:"
str.replace(/COVID\-19/g, "XXX")
// People with XXX have had a wide range of symptoms reported – ranging from mild symptoms to severe illness. Symptoms may appear 2-14 days after exposure to the virus. People with these symptoms may have XXX:
3. 正則查找替換時忽略字母大小寫
var str = "javascript Tutorial";
str.replace(/javascript/i, "JavaScript");
4. 把'Jack, hi'替換成‘Hi, Jack’
var str = "Jack, Hi";
str.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
5. 把雙引號替換成單引號
var str = '"a", "b"';
str.replace(/"([^"]*)"/g, "'$1'");
6. 把字符串中所有單詞的首字母都轉換為大寫
級批量文本替換是一款界面簡潔易用,功能強大實用的文本替換工具。支持多級目錄同時替換,支持大小寫匹配,支持文件備份,支持文件查找,智能歷史替換方案記錄以及智能備份文件批量還原系統,讓文本查找、批量查找、替換、批量替換、重復查找替換及批量備份還原更輕松,軟件特有的文件檢索引擎,使文件檢索速度極快,自帶簡潔高效文本編輯功能,讓你的文本修改更加得心應手,高效跟蹤引擎以及完善的操作報表,讓操作結果清晰明了。
軟件特色
1、文本替換的利器,批量文本替換的不二之選,站長必備,掛馬網頁殺手,
2、支持所有純ANSI文件,支持GBK/Unicode/UTF8編碼的htm、html、asp、java、php等文件
3、可自定義所支持的文件類型
4、支持16進制替換
5、支持單行和多行以及段落替換
6、支持特征替換和提取
7、支持正則替換
8、支持多規則同時替換并可以行導入規則,智能規則排序功能,
9、支持多級目錄、大小寫匹配、支持備份和恢復,替換速度快。
1、段落文字的批量替換
①點擊工具欄上的“+文件”按鈕,選定要替換的文本,比如示例文本.txt,在“查找內容”項目的“替換源目標”選項夾中輸入“shebaodan”,在“替換內容”項目中輸入“baidu”,點擊開始,于是,會看到原來文本中的“shebaodan”全部被“baidu”字樣替換
②對于在多個文件中進行替換,可以點擊“+文件夾”按鈕,指定某文件夾,輸入要查找的文字或者句子段落,輸入替換內容,點擊開始搞定。
“多內容替換”選擇后,會在右邊顯示一個文本框和綠色“+”標志,點擊“+”,彈出“多重替換設置”屬性框,比如對“示例文本.txt”中的“多多”字樣改成“shebaodan”,對“www”改成“網站”,將這些信息分別寫入“替換目標”、“替換內容”中,默認情況下是“一般替換規則”,輸入四項后,選擇“保存規則”,關閉該窗口,此時,在原來的“查找內容”、“替換內容”不再能操作了,取代它的是剛才我們定義的那條“規則”
2、特征字符串之間的批量替換
①對文件中一對字符串所劃定的區域進行處理,對于網頁、編程源文件、這些文件的特點就是看上去非常的繁瑣,不容易查詢關鍵字等,比如txt、htm、c、h、cpp、asp、cpp、java等。通過點擊工具欄上的“配置”,可以看到默認支持的文件類型,而且還可以“增加”進行定義沒有的格式,同時,確定輸出的方式,是直接在源文件上進行還是另外存儲到別處
②點擊工具欄上的“特征替換”,在源目標區添加文件或文件夾,比如打開一個htm文件,想將“<div,”中對應的內容去掉,在“起始特征字符串”中輸入“<div”,在“結束特征字符串”中輸入“”,“替換內容”中不需要輸入,最終結果是搜索全文刪除它們之間的內容。同樣也可以更換其他內容,只要在“替換內容”中輸入相應的信息就可以了
3.正則式替換,這個是最快處理文本和網頁的高級手段下面演示替換掉所有html標簽獲得網頁里面的存文本
替換成功后的效果,相信在大家在平常工作或者做自媒體的過程中肯定用得上,比如文章采集,關鍵詞收集等等都用得上
*請認真填寫需求信息,我們會在24小時內與您取得聯系。