Chuwen 发布的文章

JavaScript 原生支持 replaceAll 了

详见 MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll

replaceAll() 方法返回一个新字符串,该字符串的所有满足;模式的匹配,都被用替换者;替换了。 模式 可以是一个字符串或者一个 RegExp, 并且替代者可以是一个字符串,也可以是每次匹配都要调用的函数。

不过兼容性很低,只有 Chrome 85、Firefox 77、Safari 13.1 开始支持

Snipaste_2020-06-24_16-23-06.png

Chrome 85 运行结果

我66你66啊".replace("66", "喜欢");
>>> "我喜欢你66啊"

"我66你66啊".replaceAll("66", "喜欢");
>>> "我喜欢你喜欢啊"

Snipaste_2020-06-24_16-28-26.png

当然你还可以使用 replace 实现类似功能

"我666你666啊".replace(/666/g, "喜欢");
>>> "我喜欢你喜欢啊"

"我{{$tmp}}你{{$tmp}}啊".replace(/{{\$tmp}}/g, "喜欢");
>>> "我喜欢你喜欢啊"

小爱课程表 新版正方教务系统通用代码

Snipaste_2020-06-10_20-10-18.png
Snipaste_2020-06-10_20-10-18.png

代码

function scheduleHtmlParser(html) {
    //除函数名外都可编辑
    //传入的参数为上一步函数获取到的html
    //可使用正则匹配
    //可使用解析dom匹配,工具内置了$,跟jquery使用方法一样,直接用就可以了,参考:https://juejin.im/post/5ea131f76fb9a03c8122d6b9
    //以下为示例,您可以完全重写或在此基础上更改

    let course = $('#table1 .timetable_con');

    var courseInfos = [];//课程信息
    var sectionsTimes = [];//节次信息,非必须

    for (let i = 0; i < course.length; i++) {
        var _name = $(course[i]).find("p[class=title]").text();//课程名
        var _day_session = $(course[i]).parent().attr("id").split("-");
        var day = _day_session[0];//星期几的课
        var _postion = '',//上课地点
            _teacher = '',//教师
            sectionsTmp = [],//临时储存节次 array
            weeksTmp = [];////临时存储周次  array

        $(course[i]).find("p").each(function (index, item) {
            var _typeName = $(this).children("span").attr("data-original-title");//类别名。节/周、上课地点、教师、教学班名...
            if(_typeName !== undefined) _typeName = _typeName.trim();

            var _text = $(this).text().trim();

            if (_typeName === '节/周') {
                var _length = _text.match(/\((.+?)节\)/);

                //判断是否存在节次
                if (_length === null) {
                    return 0;//不存在就跳出本次循环
                }

                //当前课程节次信息
                sectionsTmp = function () {
                    let num = _length[1].split("-");
                    
                    let tmp = [];
                    for (let i = parseInt(num[0]); i <= parseInt(num[1]); i++) {
                        tmp.push({
                            section: parseInt(i)
                        });
                    }

                    return tmp;
                }();

                //临时存储周次
                weeksTmp = function () {
                    var tmp = [],
                        _week = _text.replace(_length[0], "").split("周")[0],//周次
                        _weekRange = _week.split("-"),
                        _weeekType = -1;//-1:不分单双周,1:单周,0:双周

                    if (_text.indexOf("(单)") !== -1) {
                        _weeekType = 1;
                    } else if (_text.indexOf("(双)") !== -1) {
                        _weeekType = 0;
                    }

                    for (let i = parseInt(_weekRange[0].trim()); i <= parseInt(_weekRange[1]); i++) {
                        if (i % 2 === _weeekType && _weeekType !== -1) tmp.push(i);//特殊单双周压入
                        if (_weeekType === -1) tmp.push(i);//部分单双周压入
                    }

                    return tmp;
                }();
            } else if (_typeName === '上课地点') {
                _position = _text;
            } else if (_typeName === '教师') {
                _teacher = _text;
            }
        });

        courseInfos.push({
            name: _name,//课程名
            position: _position,//位置
            teacher: _teacher,//教师名
            day: day,
            weeks: weeksTmp,//哪几周有课
            sections: sectionsTmp,//哪几节次
        })
    }

    console.info(courseInfos);

    return {
        courseInfos: courseInfos
    }
}

Windows 10 新建/删除 文件夹、文件 不刷新解决办法

序言

就这几天,我不知道做了什么,导致在文件管理器 新建/删除 文件夹、文件,都不会立即显示,而要 刷新/按F5 才能看到,这就很烦了,我以为是我机械硬盘坏了(现在删除一个空白文件都要几秒钟....)

解决办法

网上查了一下,有说修改注册表、禁用音频面板检测 可以解决,但是对于我来说都没有用。
指导看到了一个 执行一行命令就可以解决的办法

Win + R 弹出 运行创窗口,然后输入 ie4uinit -show 按回车,就解决了我的问题
Snipaste_2020-06-08_09-34-26.png


参考:https://jingyan.baidu.com/article/e5c39bf5f0c4d839d76033b2.html

FFmpeg 精准剪切视频

将-ss, -t 参数放在-i参数之前

对输入文件执行seek操作,会seek到-ss设置的时间点前面的关键帧上。
时间不精确,但是不会出现黑屏
ffmpeg -ss 10 -t 15 -i test.mp4 -codec copy cut.mp4

accurate_seek 剪切时间更加精确

accurate_seek必须放在-i参数之前
ffmpeg -ss 10 -t 15 -accurate_seek -i test.mp4 -codec copy cut.mp4

avoid_negative_ts

如果编码格式采用的copy 最好加上 -avoid_negative_ts 1参数
ffmpeg -ss 10 -t 15 -accurate_seek -i test.mp4 -codec copy -avoid_negative_ts 1 cut.mp4

想非常精确,就重新编码

ffmpeg -ss [start] -t [duration] -i [in].mp4 -c:v libx264 -c:a aac -strict experimental -b:a 180k [out].mp4