正则表达式初体验

1.基本语法

.除换行外任何字符 优先级较高 作用一

\.普通点 转义后 作用二

\d数字 0~9

 \s空白 \S除了空白 []元子表中加入^非 匹配非元子表中的其他内容 

let price = '23.23';
let price1 = 2323; 
console.log('验证点的作用一', /\d+.\d+/.test(price1)); // 输出 true .除换行外任何字符
console.log('验证点的作用二', /\d+\.\d+/.test(price)); // 输出true
let regDots = new RegExp('\\d+\\.\\d+'); // 这么写的原因是 '\d+\.+\d+'会被转义为d+.d+ 所以为了达到效果 转义\需要在表达式里再加一层
let url = 'https://www.baidu.com';
console.log('校验网址', /https?:\/\/\w+\.\w+\.\w+/.test(url));
let hd = "张三:010-99999999,李四:020-88888888";
console.log('输出匹配到一组手机号', hd.match(/\d{3}-\d{7,8}/)); // \d数字 \D非数字 输出 ["010-99999999"]
console.log('输出匹配出所有手机号', hd.match(/\d{3}-\d{7,8}/g)); // 输出 ["010-99999999", "020-88888888"]
console.log('匹配非数字', hd.match(/\D+/g)); // 输出 ["张三:", "-", ",李四:", "-"]
console.log('匹配数字等特殊字符', hd.match(/[-\d:,]/g)); // 输出 ["0", "1", "0", "-", "9", "9", "9", "9", "9", "9", "9", "9", "0", "2", "0", "-", "8", "8", "8", "8", "8", "8", "8", "8"]
console.log('匹配数字等特殊字符', hd.match(/[-\d:,]+/g)); // 输出 ["010-99999999", "020-88888888"]
console.log('匹配非数字等特殊字符', hd.match(/[^-\d:,]+/g)); // 输出["张三:", ",李四:"]

\w 字母数字下划线(不包括中划线和特殊字符) \W 除了数字字母下划线

let email = "[email protected]";
console.log('匹配简单邮箱', email.match(/^\w+@\w+\.\w+$/g)); // 输出 ["[email protected]"]
console.log('匹配除了数字字母下划线的内容', "hsjdsde@".match(/\W/)); // 输出 ["@"]
// 匹配字母开始 5-10位前缀的邮箱
console.log('匹配字母开始 5-10位前缀的邮箱', '[email protected]'.match(/^[a-z]\w{4,9}@\w{2,3}\.\w{2,3}$/g)); // 输出["[email protected]"]
// 匹配带空格的座机号 
let telReg = "010 - 99999999";
console.log('匹配带空格的座机号方法一', telReg.match(/^\d+\s-\s\d{8}$/)); // 直接输入空格和\s都可匹配到 ["010 - 99999999"]
console.log('匹配带空格的座机号方法二', telReg.match(/^\d+ - \d{8}$/)); // 输出 ["010 - 99999999"]
// 匹配所有字符 [\s\S] [\d\D] [\w\W]
console.log('匹配所有字符', "shwjewue@@#sd".match(/[\w\W]+/)); // 输出 ["shwjewue@@#sd"]
// 匹配座机是北京或者上海

let regPhone = /^(010|020)\-\d{7,8}$/;

let phoneNum = '020-9999999';

console.log('检查手机号是否是北京或者上海', regPhone.test(phoneNum)); // true
// 模式修正符 i g
let hdTest = "hsdusUjshds";
console.log('全局匹配大小写u', hdTest.match(/u/ig)); // 输出 ["u", "U"]
console.log('全局匹配大小写u并替换成@', hdTest.replace(/u/ig, '@')); // 输出 hsd@s@jshds
// 匹配多行
let testMultiple = `
#1 js,200元 #
#2 php,300元 #
#9 xiaowenge # test
#3 node.js,180元 #
`
console.log('匹配多行',testMultiple.match(/^\s*#\d+\s+.+\s+#$/gm)); // 输出 ["\n        #1 js,200元 #", "        #2 php,300元 #", "        #3 node.js,180元 #"]
// 将多行内容 匹配出来 并且去除#相关数据 只留中间名字和价格 输出
let resultsMultiple = testMultiple.match(/^\s*#\d+\s+.+\s+#$/gm).map(v => {
    v = v.replace(/\s*#\d+\s*/, '').replace(/\s+#/, '');
    [name, price] = v.split(',');
    return {name, price};
})
console.log('resultsMultiple', JSON.stringify(resultsMultiple, null, 2)); // 输出 resultsMultiple 如下 2是缩进2个字符
`[
    {
        "name": "js",
        "price": "200元"
    },
    {
        "name": "php",
        "price": "300元"
    },
    {
        "name": "node.js",
        "price": "180元"
    }
]`
// 汉字与字符属性 \p{L}匹配所有字符不包含数字 \p{P}匹配所有字符标点等 \p{N} 所有数字 \P{L} 不是字母,等价于 [^\p{L}] \P{N} 不是数字,等价于 [^\p{N}] [\p{N}\p{L}] 所有数字和所有字母,类似于 \w 
let testHdReg = "hjwewuyew2021.不断手机端还是等会,加油!"
console.log('匹配所有内容', testHdReg.match(/\p{L}/gu)); // 输出 ["h", "j", "w", "e", "w", "u", "y", "e", "w", "不", "断", "手", "机", "端", "还", "是", "等", "会", "加", "油"]
console.log('匹配所有字符', testHdReg.match(/\p{P}/gu)); // 输出 [".", ",", "!"]
console.log('匹配所有中文字符', testHdReg.match(/\p{sc=Han}/gu)); // 匹配所有汉字 ["不", "断", "手", "机", "端", "还", "是", "等", "会", "加", "油"]
// lastIndex属性的作用
let testData = 'lee.shou';
console.log('检索字符串', testData.match(/\w/g)); // 输出 ["l", "e", "e", "s", "h", "o", "u"]
let regLast = /\w/g; // 全局匹配 如果正则是/\w/ 没有g 非全局匹配 那么 下面检索匹配内容输出的都是["l", index:0, input: "lee.shou", groups: undefined] regLast.lastIndex输出的都是0
console.log('检索匹配内容', regLast.exec(testData)); // 输出["l", index:0, input: "lee.shou", groups: undefined]
console.log('regLast.lastIndex :>> ', regLast.lastIndex); // 输出 1
console.log('检索匹配内容', regLast.exec(testData)); // 输出["e", index:1, input: "lee.shou", groups: undefined]
console.log('regLast.lastIndex :>> ', regLast.lastIndex); // 输出 2
while (res = regLast.exec(testData)) {
    console.log('分别循环每一个数组内容 :>> ', res);
    // 输出分别循环每一个数组内容 :>>  ["e", index: 2, input: "lee.shou", groups: undefined]
    // ["s", index: 4, input: "lee.shou", groups: undefined]
    // ["h", index: 5, input: "lee.shou", groups: undefined]
    // ["o", index: 6, input: "lee.shou", groups: undefined]
    // ["u", index: 7, input: "lee.shou", groups: undefined] 前面输出过的就不再输出了
}
// 有效率的y模式 y和g模式对比 y模式连续查找 不会跳过 如果下一个连续的字符串不满足条件就回返回空 lastIndex 重新变为0 g模式可以跳过查找符合条件的内容 一直查到结尾 
let testG = /u/g;
let testYstring = 'uggugg';
console.log('查找数据 :>> ', testG.exec(testYstring)); // ["u", index: 0, input: "uggugg", groups: undefined]
console.log('查找位置 :>> ', testG.lastIndex); // 1
console.log('查找数据 :>> ', testG.exec(testYstring)); // ["u", index: 3, input: "uggugg", groups: undefined]
console.log('查找位置 :>> ', testG.lastIndex); // 4

let testY = /u/y;
console.log('查找数据 :>> ', testY.exec(testYstring)); // ["u", index: 0, input: "uggugg", groups: undefined]
console.log('查找位置 :>> ', testY.lastIndex); // 1
console.log('查找数据 :>> ', testY.exec(testYstring)); // null
console.log('查找位置 :>> ', testY.lastIndex); // 0

// y模式应用场景
let testYdata = '这几个人的QQ号分别是:1974512535,157420,8542124请录入';
let regYdata = /(\d+),?/y; // ?是0个或1个 
regYdata.lastIndex = 12;
console.log('匹配QQ号 :>> ', regYdata.exec(testYdata)); // ["1974512535,", "1974512535", index: 12, input: "这几个人的QQ号分别是:1974512535,157420,8542124请录入", groups: undefined]
console.log('匹配QQ号 :>> ', regYdata.exec(testYdata)); // ["157420,", "157420", index: 23, input: "这几个人的QQ号分别是:1974512535,157420,8542124请录入", groups: undefined]
console.log('匹配QQ号 :>> ', regYdata.exec(testYdata)); // ["8542124", "8542124", index: 30, input: "这几个人的QQ号分别是:1974512535,157420,8542124请录入", groups: undefined]
// 原子表 匹配日期
let testDate = '2022-02-23';
let testDateContent = '2022/02-23'
let regDate = /^\d{4}[-\/]\d{2}[-\/]\d{2}$/;
console.log('测试匹配日期:>> ', testDate.match(regDate)); // ["2022-02-23", index: 0, input: "2022-02-23", groups: undefined] 这样匹配有问题 2022/02-23去匹配也可以输出
let regDateAccurate = /^\d{4}([-\/])\d{2}\1\d{2}$/; // 因为([-\/])使用了原子组 所以该正则表达式里的\1代表的是与前面一致的原子组
console.log('测试匹配日期精准:>> ', testDateContent.match(regDateAccurate)); // null 因为testDateContent一个/一个-不满足条件 所以返回空 如果改成 2022/02/23则正常返回 匹配到的数组
// 区间匹配
let numberInterval = '2010';
console.log('匹配数字:>> ', numberInterval.match(/\d+/g)); // 输出 ["2010"]
console.log('匹配数字:>> ', numberInterval.match(/[0-9]+/g)); // 输出 ["2010"]
let letterInterval = "testinterval";
console.log('匹配字母:>> ', letterInterval.match(/[a-z]+/g)); // 输出 ["testinterval"]
let letterAndAnother = 'A12s233few';
console.log('匹配字母开头 数字字母下划线跟进拼接数据', letterAndAnother.match(/^[a-z]\w+$/i)); // 输出 ["A12s233few", index: 0, input: "A12s233few", groups: undefined] i模式不区分大小写
// 排除匹配 []里面的内容是包含 例如[0-9] 排除是[]中加入^ 例如 [^0-9]是指除了数字0-9
let ruleoutString = 'aftermon';
console.log(' 匹配除了tm以外的其他字符:>> ', ruleoutString.match(/[^tm]/gi)); // 输出 ["a", "f", "e", "r", "o", "n"]
let keepHan = '张三:021-0927162, 李四:010-8826723';
console.log(' 只保留中文:>> ', keepHan.match(/[^\d:\-,]+/g)); // 输出 ["张三", " 李四"] +是1个或多个 g是全局匹配  [^\d:\-,]的意思是 匹配除了数字 冒号 逗号 -以外的内容 因为-是特殊字符 所以需要转义 \- 
// 原子表字符不解析 ()在正则表达式中是原子组的意思 但是在[()]中的括号 就是普通括号的意思 .+在正则表达式中是匹配1个或者多个除了换行符以外的其他字符 但是在[.+]中 .+就是原意.+
let testNotParse = '(test123).+';
console.log('原子组匹配 :>> ', testNotParse.match(/(\w)/gi)); //  ["t", "e", "s", "t", "1", "2", "3"]
console.log('原子组匹配 :>> ', testNotParse.match(/[(\w)]/gi)); // ["(", "t", "e", "s", "t", "1", "2", "3", ")"]
console.log('原子组匹配 :>> ', testNotParse.match(/.+/gi)); // ["(test123).+"]
console.log('原子组匹配 :>> ', testNotParse.match(/[.+]/gi)); // [".", "+"]
// 使用原子表匹配所有内容 [\s\S] 匹配所有内容 [\d\D] 匹配所有内容

let testAllContent = `
#1 js,200元 #
#2 php,300元 #
#9 xiaowenge # test
#3 node.js,180元 #
`
console.log(' 测试:>> ', testAllContent.match(/.+/gs)); // 与下面两者等价 s模式是忽略换行符 .+到换行符处就不匹配了 加上s模式就可以将整个内容都匹配出来 输出 ["\n        #1 js,200元 #\n        #2 php,300元 #\n      …aowenge # test\n        #3 node.js,180元 #\n        "]
console.log(' 测试:>> ', testAllContent.match(/[\s\S]+/)); // 输出 与上面两者等价 ["\n        #1 js,200元 #\n        #2 php,300元 #\n      …aowenge # test\n        #3 node.js,180元 #\n        ", index: 0, input: "\n        #1 js,200元 #\n        #2 php,300元 #\n      …aowenge # test\n        #3 node.js,180元 #\n        ", groups: undefined]
console.log(' 测试:>> ', testAllContent.match(/[\s\S]+/)[0]); // 输出如下 testAllContent原本格式内容
// #1 js,200元 #
// #2 php,300元 #
// #9 xiaowenge # test
// #3 node.js,180元 #
// 正则操作Dom元素 Dom元素内容script外面的body内

    
正则操作Dom元素

testh1的数据

h2相关的内容

testh4 test

let getBody = document.body; let regReplace = /<(h[1-6])>[\s\S]*<\/\1>$/gim; console.log('替换:>> ', '

test

'.match(regReplace)); // 输出 ["

test

"] let matchBody = getBody.innerHTML.match(regReplace); console.log('matchBody :>> ', matchBody); // ["

testh1的数据

\n

h2相关的内容

\n

\n

\n testh4\n

"] getBody.innerHTML = getBody.innerHTML.replace(regReplace, "");
// 认识原子组
let testGroups = /<(h[1-6])>[\s\S]*<\/\1>/i;
let testGroupString = `

testdata

testhhh2

`; console.log('认识原子组 :>> ', testGroupString.match(testGroups)); // ["

testdata

", "h1", index: 9, input: "\n

testdata

testhhh2

", groups: undefined]
// 邮箱验证中原子组的使用
let mailData = "[email protected]";
let mailQQ = "[email protected]";
let mailReg = /^[\w-]+@([\w-]+\.)+(com|cn|org|cc|net)$/gi;
console.log('邮箱验证中原子组的使用 :>> ', mailData.match(mailReg)); // ["[email protected]"]
console.log('邮箱验证中原子组的使用QQ邮箱 :>> ', mailQQ.match(mailReg)); // ["[email protected]"]
// 原子组引用 完成替换操作
let testReplaceReg = /<(h[1-6])>([\s\S]*)<\/\1>/gi;
let testReplaceLable = `
    

testh1

testspan

testh2

`; console.log('替换h1为p标签 :>> ', testReplaceLable.replace(testReplaceReg, `

$2

`)); // 输出 //

testh1

// testspan //

testh2

let replaceFunction = testReplaceLable.replace(testReplaceReg, (p0, p1, p2) => { // p0

testh1

testh2

// p1 h1 h2 // p2 testh1 testh2 return `

${p2}

` }); console.log('replaceFunction', replaceFunction); // 输出的值同上
// 嵌套分组与不记录组 ?:标注的内容 不计入原子组 此时 $1 \1将失效 $2 \2将失效
let testNotRecord = /https?:\/\/((?:\w+\.)?\w+\.(?:com|cn|org))/gi;
let testNotRecordString = `
https://www.baidu.com
https://dior.cn
http://taobao.com
`;

console.log(' 嵌套分组与不记录组:>> ', testNotRecordString.match(testNotRecord)); // ["https://www.baidu.com", "https://dior.cn", "http://taobao.com"]
let collectionUrl = [];
while (result = testNotRecord.exec(testNotRecordString)) {
    console.log('result', result);
    collectionUrl.push(result[0]);
}
console.log('collectionUrl', collectionUrl); // ["https://www.baidu.com", "https://dior.cn", "http://taobao.com"] 注意不能在while外层提前打印执行testNotRecord.exec(testNotRecordString)看是否生效以及输出的值 如此操作的话 会改变lastIndex while中就会少匹配到第一个内容 从第二个开始了
// 多种重复匹配基本使用 * 0个或多个 + 1个或多个 ? 0个或1个 贪婪模式 {2,5}匹配2个到5个 如果有5个 会找到5个 {3}匹配3个 {1,}匹配1个到无穷多个
let testHd = "hdddddd";
console.log('匹配0个或多个 :>> ', testHd.match(/hd*/g)); // ["hdddddd"]
console.log('匹配1个或多个 :>> ', testHd.match(/hd+/g)); // ["hdddddd"]
console.log('匹配0个或1个 :>> ', testHd.match(/hd?/g)); // ["hd"]
console.log('匹配2个到5个 :>> ', testHd.match(/hd{2,5}/g)); // ["hddddd"]
console.log('匹配3个 :>> ', testHd.match(/hd{3}/g)); // ["hddd"]
console.log('匹配1个到无穷多个 :>> ', testHd.match(/hd{1,}/g)); // ["hdddddd"]
// 重复匹配对原子组影响与电话号正则
let testGroundAdd = "hddddhdhdhdhdd"
console.log(' 匹配所有hd:>> ', testGroundAdd.match(/(hd)+/g)); // ["hd", "hdhdhdhd"]
let telFourAreaCode = '0478-66723527';
let telThreeAreaCode = '010-9999999';
let regAllPhone = /^0\d{2,3}-\d{7,8}$/g
console.log('匹配区号为四位的电话号 :>> ', telFourAreaCode.match(regAllPhone)); // ["0478-66723527"]
console.log('匹配区号为三位的电话号 :>> ', telThreeAreaCode.match(regAllPhone)); // ["010-9999999"]
// 网站用户名验证 a-z开头 全长最多8位 后7位可以是-或者数字字母下划线
验证用户名:
console.log('document.getElementById(test :>> ', document.getElementById("userName")); document.getElementById("userName").addEventListener("keyup", e => { const value = e.target.value; let testUserName = /^[a-z][\w-]{2,7}$/i; console.log('校验用户名是否符合 :>> ', testUserName.test(value)); // 输入a12 true a12323212 false 超位数 11111 false })
// 批量使用正则完成密码验证 密码包含字母数字 并且必须包含1个大写的字母 为了方便操作 这里input写的text类型
验证密码:
document.querySelector(`[name="password"]`).addEventListener('keyup', e => { const value = e.target.value; const testPassword = [ /^[a-z0-9]{5,10}$/i, /[A-Z]/, /[0-9]/ ] let correctResults = testPassword.every(eve => eve.test(value)); console.log('验证密码是否正确 :>> ', correctResults); // 当输入数字 大写字母并且位数大于等于5小于等于10的时候 返回true 小写字母这里是可选的 所以不影响结果 输入位数不足 或者没满足条件时 返回false })
// 禁止贪婪 ?
let testBan = 'hddddddd';
console.log(' 禁止贪婪1个或多个:>> ', testBan.match(/hd+?/g)); // ["hd"]
console.log(' 禁止贪婪0个或多个:>> ', testBan.match(/hd*?/g)); // ["h"]
console.log(' 禁止贪婪0个或1个:>> ', testBan.match(/hd??/g)); // ["h"]
console.log(' 禁止贪婪区间数据:>> ', testBan.match(/hd{2,5}?/g)); // ["hdd"]
console.log(' 禁止贪婪区间无穷大数据:>> ', testBan.match(/hd{3,}?/g)); // ["hddd"]
// 标签替换的禁止贪婪使用
testchange changespan mychange
const changeSpan = document.querySelector("#spanChange") const changeSpanReg = /([\s\S]+?)<\/span>/gi; console.log(' 数据转换:>> ', changeSpan.innerHTML.match(changeSpanReg)); changeSpan.innerHTML = changeSpan.innerHTML.replace(changeSpanReg, (v, p1) => { return `

h4替换内容-${p1}

` // 输出结果为红色的 内容如下 // h4替换内容-testchange // h4替换内容-changespan // h4替换内容-mychange })
// 使用matchAll完成全局匹配

匹配内容h1

匹配内容h2

匹配内容h1

const matchAllData = document.querySelector("#matchAll"); const matchAllReg = /<(h[1-6])>([\s\S]+?)<\/\1>/gi; const allMatchData = matchAllData.innerHTML.matchAll(matchAllReg); console.log('匹配所有 :>> ', matchAllData.innerHTML.matchAll(matchAllReg)); let contents = []; for (const iterator of allMatchData) { console.dir(iterator); // iterator为数组 ["

匹配内容h1

", "h1", "匹配内容h1", groups: undefined, index: 9, input: "\n

匹配内容h1

\n

匹配内容h2

\n

匹配内容h1

\n"] contents.push(iterator[2]); // iterator[2] 分别是匹配内容h1 匹配内容h2 匹配内容h1 } console.table(contents); // 控制台表格输出 h1 h2里面的内容 // 为低端浏览器定义原型方法 matchAll String.prototype.matchAll = function (reg) { let res = this.match(reg); console.log('res :>> ', res); if (res) { let str = this.replace(res[0], '^'.repeat(res[0].length)); let match = str.matchAll(reg) || []; console.log('match', match); return [res, ...match]; } } let testMatchAll = 'hyetgegghgeeh'; console.log('为低端浏览器定义原型方法 matchAll :>> ', testMatchAll.matchAll(/h/i)); // 返回 [["h", index: 0, input: "hyetgegghgeeh", groups: undefined],["h", index: 8, input: "^yetgegghgeeh", groups: undefined], ["h", index: 12, input: "^yetgegg^geeh", groups: undefined]]
// 正则表达式中添加变量 用构造函数表达式加入变量 字面量形式不生效
let addVariable = 3;
let getVariable = new RegExp(`${addVariable}`, 'g').exec('123');
console.log('getVariable :>> ', getVariable); // ["3", index: 2, input: "123", groups: undefined]
// 使用exec完成全局匹配
let testExecGlobal = /u/gi;
let testString = 'hwusgdguqwd';
let saveResult = [];
while (res = testExecGlobal.exec(testString)) {
    saveResult.push(res);
}
console.log('saveResult :>> ', saveResult); // [["u", groups: undefined, index: 2, input: "hwusgdguqwd"],["u", groups: undefined, index: 7, input: "hwusgdguqwd"]]

function search(string, reg) {
    let serachResult = [];
    while (res = reg.exec(string)) {
        serachResult.push(res);
    }
    return serachResult;
}
console.log(' 使用exec完成全局匹配:>> ', search('hweurtesfr', /e/gi)); // [["e", index: 2, input: "hweurtesfr", groups: undefined], ["e", index: 6, input: "hweurtesfr", groups: undefined]]
// 字符串正则方法search与match
let testSearchReg = 'huwvbsdhwy'.search(/h/); // 0
console.log('testSearchReg :>> ', testSearchReg);
let testSearchString = 'huwvbsdhwy'.search('h');
console.log('testSearchString :>> ', testSearchString); // 0
let testMatch = 'huwvbsdhwy'.match(/h/gi);
console.log('testMatch :>> ', testMatch); // ["h", "h"]
let testUrl = `
https://www.sina.com.cn
http://leeosi.com
https://www.baidu.com
`;
let regUrl = /https?:\/\/(\w+\.)?(\w+\.)+(com|cn|org|cc)/gi;
console.log('testUrl.match(regUrl) :>> ', testUrl.match(regUrl)); //  ["https://www.sina.com.cn", "http://leeosi.com", "https://www.baidu.com"]
// 字符串正则方法matchAll与split
let testUrlAll = `
https://www.sina.com.cn
http://leeosi.com
https://www.baidu.com
`;
let regUrlAll = /https?:\/\/(?:\w+\.)?(?:\w+\.)+(?:com|cn|org|cc)/gi;
console.dir(testUrlAll.matchAll(regUrlAll)); // RegExpStringIterator
for (const iterator of testUrlAll.matchAll(regUrlAll)) {
    console.log('iterator :>> ', iterator);
}
let testSplit = '2021-08/10';
console.log('split测试 :>> ', testSplit.split(/[-/]/)); // ["2021", "08", "10"]
// $符在正则替换中的使用 $`匹配到内容的左边的内容 $'匹配到内容的右边的内容 $&当前内容
let testDateReplace = "2021/08/10";
console.log('替换/为- :>> ', testDateReplace.replace(/\//g, '-'));
let telParentheses = "(010)99999999 (020)8888888"; // 把(010)99999999 替换成 010-99999999
let telParenthesesReg = /\((\d{3,4})\)([0-9]{7,8})/g;
console.log('替换电话号 :>> ', telParentheses.replace(telParenthesesReg, "$1-$2"));
let matchString = "=优秀的人#";
let matchCurrent = matchString.replace(/优秀的人/, "$&"); // =优秀的人#
let matchLeft = matchString.replace(/优秀的人/, "$`"); // ==#
let matchRight = matchString.replace(/优秀的人/, "$'"); // =##
console.log('matchCurrent :>> ', matchCurrent); // =优秀的人#
console.log('matchLeft :>> ', matchLeft); // ==#
console.log('matchRight :>> ', matchRight); // =##
console.log('多加几个符号 :>> ', matchString.replace(/优秀的人/, "$`$`$&$'$'")); // ===优秀的人###
// $&使用 将html内容中 '学历教育-在线教育是一种快速提升自我的方案' 教育2个字加上跳转链接 
学历教育-在线教育是一种快速提升自我的方案
const getEducation = document.querySelector('#replaceHref'); getEducation.innerHTML = getEducation.innerHTML.replace(/教育/g, "$&")
// 原子组在替换中的使用技巧 http://www/hdyyr.com http://baidu.com 给这2个a标签对应的链接补全 不是https的补全 没有www.的加上 其他a标签的不变 h4的内容也不变
开源中国 百度 雅虎

http://www.yahoo.com

const completeElement = document.querySelector("#completionHref"); const completeElementReg = /( { // console.log('v :>> ', v); console.log('args :>> ', args); args = args.splice(0,5); args[1] = args[1] == 'http' ? 'https': args[1]; args[3] = args[3] || 'www.'; return args.join(''); // 开源中国 百度 })
// 原子组别名 ? 给原子组起别名为con

别名h1

我是span内容

别名h2

const testAtomicName = document.querySelector("#atomicName"); const testAtomicRegular = /<(h[1-6])>(.*?)<\/\1>/gi; testAtomicName.innerHTML = testAtomicName.innerHTML.replace(testAtomicRegular, '

$2

'); // 等价于上面 其中?就是给当前原子组起的别名 把$2用别名替换掉了 这种起别名的情况用于正则表达式中原子组较多的情况 防止混淆 const testAtomicSpecial = /<(h[1-6])>(?.*?)<\/\1>/gi; testAtomicName.innerHTML = testAtomicName.innerHTML.replace(testAtomicSpecial, '

$

');
// 使用原子组别名优化正则 ? ?等这种重命名的原子组 会在groups属性中提现出来
<main id="aliasOptimization">
    <a href="https://www.taobao.com">淘宝</a>
    <a href="https://baidu.com">百度</a>
    <a href="https://www.yahoo.com/">雅虎</a>
</main>
const mainAlias = document.querySelector("#aliasOptimization");
const mainAliasReg = /<a.*?href=(["'])(?<link>.*?)\1>(?<title>.*?)<\/a>/gi;
let collectData = [];
for (const iterator of mainAlias.innerHTML.matchAll(mainAliasReg)) {
    console.log('iterator :>> ', iterator);
    collectData.push(iterator.groups);
}
console.log('collectData :>> ', collectData); // [{link: "https://www.taobao.com", title: "淘宝"}, {link: "https://baidu.com", title: "百度"}, {link: "https://www.yahoo.com/", title: "雅虎"}]</code></pre> 
  <pre><code>// 正则方法test
<div>
    验证邮箱:<input type="text" name="email" />
</div>
const emailDom = document.querySelector(`[name="email"]`);
emailDom.addEventListener('keyup', e=> {
    let emailValue = e.target.value;
    let emailFlag = /^[\w-]+@(\w+\.)+(com|cn|org)$/i.test(emailValue);
    console.log('emailFlag :>> ', emailFlag);
})</code></pre> 
  <pre><code>// 正则方法exec 注意 这里的while判断里不可以直接/军人/g.exec(execTest)这样写 会进入死循环 将正则表达式/军人/g用一个变量execReg接收 就不会有这个问题
let execTest = '我是中华人民共和国解放军军人 我宣誓 坚决服从党的领导 全新全意为人民服务 军人';
let count = 0;
const execReg = /军人/g;
while(countData = execReg.exec(execTest)) {
    count++;
}
console.log('测试军人出现次数count :>> ', count);
console.log('测试exec :>> ', /军人/g.exec(execTest)); // ["军人", index: 12, input: "我是中华人民共和国解放军军人 我宣誓 坚决服从党的领导 全新全意为人民服务 军人", groups: undefined]
console.log('测试match :>> ', execTest.match(/军人/g)); // ["军人", "军人"]</code></pre> 
  <pre><code>// ?=断言匹配 可以理解为条件语句 断言匹配后面是什么
<main id="assert">
    巨人真的存在吗?让我们带你揭开巨人面纱;
</main>
let testAssertions = document.querySelector("#assert");
testAssertions.innerHTML = testAssertions.innerHTML.replace(/巨人(?=面纱)/g, "<a href='https://www.baidu.com'>$&</a>"); // 巨人真的存在吗?让我们带你揭开巨人面纱; 给面纱前面的巨人 加上了链接 ?=相当于判断条件 后面有面纱的巨人 才可以满足条件被匹配</code></pre> 
  <pre><code>// 使用断言规范价格
let lessons = `
    js,200元,300次
    php,300.00元,100次
    node.js,180元,260次
`;
const lessonsReg = /(\d+)(.00)?(?=元)/g;
lessons = lessons.replace(lessonsReg, (v1, ...args) => {
    console.log('args :>> ', args);
    args[1] = args[1] ? args[1]: '.00';
    return args.splice(0,2).join('');
}); // 方法1
lessons = lessons.replace(lessonsReg, "$1.00") // 方法2
console.log('lessons :>> ', lessons);</code></pre> 
  <pre><code>// ?<=断言匹配 前面是什么
let assertFront = "hwkewww789dhcbwww";
let assertFrontReg = /(?<=www)\d+/g;
console.log('?<=断言匹配 :>> ', assertFront.match(assertFrontReg)); // ["789"]
let assertHref = `
    <a href="https://www.baidu.com">百度</a>
    <a href="https://www.yahoo.com">雅虎</a>
`
let assertHrefReg = /(?<=href=(["'])).*(?=\1)/g;
console.log('object :>> ', assertHref.match(assertHrefReg));
assertHref = assertHref.replace(assertHrefReg, 'https://www.taobao.com');
console.log('assertHref :>> ', assertHref);</code></pre> 
  <pre><code>// 使用断言模糊电话号
let fuzzyTel = `
    李雪 15874245812
    王博 13342147841
`;
let fuzzyTelReg = /(?<=\d{7})\d{4}/g;
fuzzyTel = fuzzyTel.replace(fuzzyTelReg, (v) => {
    return '*'.repeat(4);
})
console.log('fuzzyTel :>> ', fuzzyTel);</code></pre> 
  <pre><code>// ?!断言匹配 断言匹配后面不是什么
let assertSub = 'houlai2020hdm';
const subReg = /[a-z]+(?!\d+)$/g;
console.log('assertSub :>> ', assertSub.match(subReg)); // ["hdm"]</code></pre> 
  <pre><code>// 断言限制用户名关键词
<main id="assertNoContain">
    验证内容中不包含:<input type="text" name="assertContain">
</main>
const getContain = document.querySelector(`[name='assertContain']`);
getContain.addEventListener("keyup", function() {
    const reg = /^(?!.*世界.*).*/;
    console.log('this.value.match(reg):>> ', this.value.match(reg));
})</code></pre> 
  <pre><code>// ?<!断言匹配 断言匹配前面不是谁
let notNum = "hhdd987yyxxd";
let notNumReg = /^(?<!\d+)[a-z]+/g;
console.log('断言匹配前面不是谁 :>> ', notNum.match(notNumReg)); // ["hhdd"]</code></pre> 
  <pre><code>// 使用断言排除法统一数据
let unifiedData = `
    https://www.baidu.com/1.jpg
    https://hdd.com/2.jpg
    https://oss.yundao.com/3.jpg
    https://m.dior.cn/4.jpg
    http://www.leecode.com/5.jpg
`
const unifiedDataReg = /https?:\/\/([a-z]+)?(?<!oss)\..+?(?=\/)/g;
console.log('unifiedData :>> ', unifiedData.match(unifiedDataReg)); // ["https://www.baidu.com", "https://hdd.com", "https://m.dior.cn", "http://www.leecode.com"]
unifiedData = unifiedData.replace(unifiedDataReg, v => {
    console.log('v :>> ', v);
    return "https://oss.yundao.com"
})
console.log('unifiedData :>> ', unifiedData); // 输出如下
// https://oss.yundao.com/1.jpg
// https://oss.yundao.com/2.jpg
// https://oss.yundao.com/3.jpg
// https://oss.yundao.com/4.jpg
// https://oss.yundao.com/5.jpg</code></pre> 
  <p></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1712985027551244288"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(javascript)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835509897106649088.htm"
                           title="Long类型前后端数据不一致" target="_blank">Long类型前后端数据不一致</a>
                        <span class="text-muted">igotyback</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问</div>
                    </li>
                    <li><a href="/article/1835498925755297792.htm"
                           title="DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理" target="_blank">DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理</a>
                        <span class="text-muted">STU学生网页设计</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1/1.htm">网页设计</a><a class="tag" taget="_blank" href="/search/%E6%9C%9F%E6%9C%AB%E7%BD%91%E9%A1%B5%E4%BD%9C%E4%B8%9A/1.htm">期末网页作业</a><a class="tag" taget="_blank" href="/search/html%E9%9D%99%E6%80%81%E7%BD%91%E9%A1%B5/1.htm">html静态网页</a><a class="tag" taget="_blank" href="/search/html5%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">html5期末大作业</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1/1.htm">网页设计</a><a class="tag" taget="_blank" href="/search/web%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web大作业</a>
                        <div>️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程</div>
                    </li>
                    <li><a href="/article/1835496149843275776.htm"
                           title="关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript" target="_blank">关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript</a>
                        <span class="text-muted">二挡起步</span>
<a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web前端期末大作业</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a><a class="tag" taget="_blank" href="/search/%E9%A3%8E%E6%99%AF/1.htm">风景</a>
                        <div>⛵源码获取文末联系✈Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业|游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作|HTML期末大学生网页设计作业,Web大学生网页HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScrip</div>
                    </li>
                    <li><a href="/article/1835496148601761792.htm"
                           title="HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动" target="_blank">HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动</a>
                        <span class="text-muted">二挡起步</span>
<a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web前端期末大作业</a><a class="tag" taget="_blank" href="/search/web%E8%AE%BE%E8%AE%A1%E7%BD%91%E9%A1%B5%E8%A7%84%E5%88%92%E4%B8%8E%E8%AE%BE%E8%AE%A1/1.htm">web设计网页规划与设计</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/dreamweaver/1.htm">dreamweaver</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线</div>
                    </li>
                    <li><a href="/article/1835492740536823808.htm"
                           title="node.js学习" target="_blank">node.js学习</a>
                        <span class="text-muted">小猿L</span>
<a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a>
                        <div>node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行</div>
                    </li>
                    <li><a href="/article/1835448239864770560.htm"
                           title="JavaScript 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)" target="_blank">JavaScript 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)</a>
                        <span class="text-muted">跳房子的前端</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95/1.htm">前端面试</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a>
                        <div>在JavaScript中,深拷贝(DeepCopy)和浅拷贝(ShallowCopy)是用于复制对象或数组的两种不同方法。了解它们的区别和应用场景对于避免潜在的bugs和高效地处理数据非常重要。以下是对深拷贝和浅拷贝的详细解释,包括它们的概念、用途、优缺点以及实现方式。1.浅拷贝(ShallowCopy)概念定义:浅拷贝是指创建一个新的对象或数组,其中包含了原对象或数组的基本数据类型的值和对引用数</div>
                    </li>
                    <li><a href="/article/1835428948339683328.htm"
                           title="JavaScript `Map` 和 `WeakMap`详细解释" target="_blank">JavaScript `Map` 和 `WeakMap`详细解释</a>
                        <span class="text-muted">跳房子的前端</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E5%8E%9F%E7%94%9F%E6%96%B9%E6%B3%95/1.htm">原生方法</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在JavaScript中,Map和WeakMap都是用于存储键值对的数据结构,但它们有一些关键的不同之处。MapMap是一种可以存储任意类型的键值对的集合。它保持了键值对的插入顺序,并且可以通过键快速查找对应的值。Map提供了一些非常有用的方法和属性来操作这些数据对:set(key,value):将一个键值对添加到Map中。如果键已经存在,则更新其对应的值。get(key):获取指定键的值。如果键</div>
                    </li>
                    <li><a href="/article/1835419870070665216.htm"
                           title="切换淘宝最新npm镜像源是" target="_blank">切换淘宝最新npm镜像源是</a>
                        <span class="text-muted">hai40587</span>
<a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>切换淘宝最新npm镜像源是一个相对简单的过程,但首先需要明确当前淘宝npm镜像源的状态和最新的镜像地址。由于网络环境和服务更新,镜像源的具体地址可能会发生变化,因此,我将基于当前可获取的信息,提供一个通用的切换步骤,并附上最新的镜像地址(截至回答时)。一、了解npm镜像源npm(NodePackageManager)是JavaScript的包管理器,用于安装、更新和管理项目依赖。由于npm官方仓库</div>
                    </li>
                    <li><a href="/article/1835383919906746368.htm"
                           title="高性能javascript--算法和流程控制" target="_blank">高性能javascript--算法和流程控制</a>
                        <span class="text-muted">海淀萌狗</span>

                        <div>-for,while和do-while性能相当-避免使用for-in循环,==除非遍历一个属性量未知的对象==es5:for-in遍历的对象便不局限于数组,还可以遍历对象。原因:for-in每次迭代操作会同时搜索实例或者原型属性,for-in循环的每次迭代都会产生更多开销,因此要比其他循环类型慢,一般速度为其他类型循环的1/7。因此,除非明确需要迭代一个属性数量未知的对象,否则应避免使用for-i</div>
                    </li>
                    <li><a href="/article/1835373236217540608.htm"
                           title="360前端星计划-动画可以这么玩" target="_blank">360前端星计划-动画可以这么玩</a>
                        <span class="text-muted">马小蜗</span>

                        <div>动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能</div>
                    </li>
                    <li><a href="/article/1835360244646113280.htm"
                           title="JavaScript中秋快乐!" target="_blank">JavaScript中秋快乐!</a>
                        <span class="text-muted">Q_w7742</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a>
                        <div>我们来实现一个简单的祝福网页~主要的难度在于使用canvas绘图当点击canvas时候,跳出“中秋节快乐”字样,需要注册鼠标单击事件和计时器。首先定义主要函数:初始化当点击canvas之后转到onCanvasClick函数,绘图生成灯笼。functiononCanvasClick(){//事件处理函数context.clearRect(0,0,canvas1.width,canvas1.heigh</div>
                    </li>
                    <li><a href="/article/1835359727924637696.htm"
                           title="Nginx从入门到实践(三)" target="_blank">Nginx从入门到实践(三)</a>
                        <span class="text-muted">听你讲故事啊</span>

                        <div>动静分离动静分离是将网站静态资源(JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。rewrite规则Rewrite规则常见正则表达式Rewrite主要的功能就是实现URL的重写,Ngin</div>
                    </li>
                    <li><a href="/article/1835354700392787968.htm"
                           title="Nginx的使用场景:构建高效、可扩展的Web架构" target="_blank">Nginx的使用场景:构建高效、可扩展的Web架构</a>
                        <span class="text-muted">张某布响丸辣</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>Nginx,作为当今最流行的Web服务器和反向代理软件之一,凭借其高性能、稳定性和灵活性,在众多Web项目中扮演着核心角色。无论是个人博客、中小型网站,还是大型企业级应用,Nginx都能提供强大的支持。本文将探讨Nginx的几个主要使用场景,帮助读者理解如何在实际项目中充分利用Nginx的优势。1.静态文件服务对于包含大量静态文件(如HTML、CSS、JavaScript、图片等)的网站,Ngin</div>
                    </li>
                    <li><a href="/article/1835354447627251712.htm"
                           title="前端知识点" target="_blank">前端知识点</a>
                        <span class="text-muted">ZhangTao_zata</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                        <div>下面是一个最基本的html代码body{font-family:Arial,sans-serif;margin:20px;}//JavaScriptfunctionthatdisplaysanalertwhencalledfunctionshowMessage(){alert("Hello!Youclickedthebutton.");}MyFirstHTMLPageWelcometoMyPage</div>
                    </li>
                    <li><a href="/article/1835331376895848448.htm"
                           title="【JS】前端文件读取FileReader操作总结" target="_blank">【JS】前端文件读取FileReader操作总结</a>
                        <span class="text-muted">程序员-张师傅</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>前端文件读取FileReader操作总结FileReader是JavaScript中的一个WebAPI,它允许web应用程序异步读取用户计算机上的文件(或原始数据缓冲区)的内容,例如读取文件以获取其内容,并在不将文件发送到服务器的情况下在客户端使用它。这对于处理图片、文本文件等非常有用,尤其是当你想要在用户界面中即时显示文件内容或进行文件预览时。创建FileReader对象首先,你需要创建一个Fi</div>
                    </li>
                    <li><a href="/article/1835298981362626560.htm"
                           title="webstorm报错TypeError: this.cliEngine is not a constructor" target="_blank">webstorm报错TypeError: this.cliEngine is not a constructor</a>
                        <span class="text-muted">Blue_Color</span>

                        <div>点击Details在控制台会显示报错的位置TypeError:this.cliEngineisnotaconstructoratESLintPlugin.invokeESLint(/Applications/RubyMine.app/Contents/plugins/JavaScriptLanguage/languageService/eslint/bin/eslint-plugin.js:97:</div>
                    </li>
                    <li><a href="/article/1835296397365178368.htm"
                           title="创建一个完整的购物商城系统是一个复杂的项目,涉及前端(用户界面)、后端(服务器逻辑)、数据库等多个部分。由于篇幅限制,我无法在这里提供一个完整的系统代码,但我可以分别给出一些关键部分的示例代码,涵盖几" target="_blank">创建一个完整的购物商城系统是一个复杂的项目,涉及前端(用户界面)、后端(服务器逻辑)、数据库等多个部分。由于篇幅限制,我无法在这里提供一个完整的系统代码,但我可以分别给出一些关键部分的示例代码,涵盖几</a>
                        <span class="text-muted">uthRaman</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>前端(HTML/CSS/JavaScript)grsyzp.cnHTML页面结构(index.html)html购物商城欢迎来到购物商城JavaScript(Ajax请求商品数据,app.js)javascriptdocument.addEventListener('DOMContentLoaded',function(){fetch('/api/products').then(response=</div>
                    </li>
                    <li><a href="/article/1835293121953492992.htm"
                           title="了解 UNPKG:前端开发者的包管理利器" target="_blank">了解 UNPKG:前端开发者的包管理利器</a>
                        <span class="text-muted">小于负无穷</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>在现代前端开发中,JavaScript包管理和模块化是至关重要的,而npm则是最流行的JavaScript包管理器之一。不过,随着前端项目复杂性的增加,有时候我们希望快速引入外部依赖,而无需本地安装和构建。此时,CDN(内容分发网络)成为了一种方便快捷的解决方案,而UNPKG就是这种方式中的佼佼者。什么是UNPKG?UNPKG是一个基于npm的内容分发网络(CDN),它允许开发者直接通过URL从n</div>
                    </li>
                    <li><a href="/article/1835247344719851520.htm"
                           title="2019-05-29 vue-router的两种模式的区别" target="_blank">2019-05-29 vue-router的两种模式的区别</a>
                        <span class="text-muted">Kason晨</span>

                        <div>1、大家都知道vue是一种单页应用,单页应用就是仅在页面初始化的时候加载相应的html/css/js一单页面加载完成,不会因为用户的操作而进行页面的重新加载或者跳转,用javascript动态的变化html的内容优点:良好的交互体验,用户不需要刷新页面,页面显示流畅,良好的前后端工作分离模式,减轻服务器压力,缺点:不利于SEO,初次加载耗时比较多2、hash模式vue-router默认的是hash</div>
                    </li>
                    <li><a href="/article/1835216109297561600.htm"
                           title="electron多标签页模式更像客户端" target="_blank">electron多标签页模式更像客户端</a>
                        <span class="text-muted">diygwcom</span>
<a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>Electron多标签页模式是指在Electron框架中实现的类似Web浏览器的多标签页功能。Electron是一个使用Web技术(HTML、CSS和JavaScript)来创建跨平台桌面应用程序的框架。在Electron中实现多标签页模式,通常需要借助一些特定的库或组件,如BrowserView或electron-tabs,或者通过自定义实现。实现方式1.使用BrowserViewBrowser</div>
                    </li>
                    <li><a href="/article/1835194426499100672.htm"
                           title="外卖霸王餐返利外卖会员卡小程序开发" target="_blank">外卖霸王餐返利外卖会员卡小程序开发</a>
                        <span class="text-muted">闹小艾</span>
<a class="tag" taget="_blank" href="/search/good506070/1.htm">good506070</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a>
                        <div>外卖霸王餐返利外卖会员卡小程序开发"社交电商赋能下的外卖返利小程序"是专为商家与用户双赢而设计的创新平台。以下是其开发方案的详细步骤:一、需求梳理:首先,我们需要明确小程序的核心功能和特色。包括设定活动类型、返利策略,以及用户体验友好的界面设计。二、技术决策:技术选型是关键。我们采用小程序的开发框架,利用JavaScript作为前端开发语言,并结合微信提供的API进行后端接口调用与数据处理。三、账</div>
                    </li>
                    <li><a href="/article/1835192531881652224.htm"
                           title="Axure设计之全屏与退出全屏交互实现" target="_blank">Axure设计之全屏与退出全屏交互实现</a>
                        <span class="text-muted">招风的黑耳</span>
<a class="tag" taget="_blank" href="/search/Axure/1.htm">Axure</a><a class="tag" taget="_blank" href="/search/axure/1.htm">axure</a><a class="tag" taget="_blank" href="/search/%E4%BA%A4%E4%BA%92/1.htm">交互</a>
                        <div>在AxureRP中,设计全屏与退出全屏的交互功能可以极大地提升用户体验,尤其是在展示产品原型或进行演示时。本文将详细介绍如何在AxureRP中通过结合JavaScript代码实现全屏与退出全屏的交互效果。Axure原型设计web端交互元件库:https://1zvcwx.axshare.com一、设计思路全屏与退出全屏的交互设计主要依赖于JavaScript代码来控制浏览器的全屏模式。在Axure</div>
                    </li>
                    <li><a href="/article/1835162742533746688.htm"
                           title="全面指南:用户行为从前端数据采集到实时处理的最佳实践" target="_blank">全面指南:用户行为从前端数据采集到实时处理的最佳实践</a>
                        <span class="text-muted">数字沉思</span>
<a class="tag" taget="_blank" href="/search/%E8%90%A5%E9%94%80/1.htm">营销</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E9%87%8F%E8%BF%90%E8%90%A5/1.htm">流量运营</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AE%B9%E8%BF%90%E8%90%A5/1.htm">内容运营</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>引言在当今的数据驱动世界,实时数据采集和处理已经成为企业做出及时决策的重要手段。本文将详细介绍如何通过前端JavaScript代码采集用户行为数据、利用API和Kafka进行数据传输、通过Flink实时处理数据的完整流程。无论你是想提升产品体验还是做用户行为分析,这篇文章都将为你提供全面的解决方案。设计一个通用的ClickHouse表来存储用户事件时,需要考虑多种因素,包括事件类型、时间戳、用户信</div>
                    </li>
                    <li><a href="/article/1835154546289111040.htm"
                           title="EcmaScript和JavaScript的区别" target="_blank">EcmaScript和JavaScript的区别</a>
                        <span class="text-muted">每天吃八顿</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a>
                        <div>ECMAScript和JavaScript是经常被混淆的两个术语,但实际上它们之间存在一些区别:ECMAScript:ECMAScript(通常缩写为ES,并且有版本号如ES5,ES6和ES7等)是由ECMA国际(EuropeanComputerManufacturersAssociation)制定的一种脚本语言的规范。这个规范定义了语法、命令、数据类型等基本元素。ECMAScript是一种规范,</div>
                    </li>
                    <li><a href="/article/1835137656992919552.htm"
                           title="javascript添加p元素,html添加文字,appendChild" target="_blank">javascript添加p元素,html添加文字,appendChild</a>
                        <span class="text-muted">游勇一</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html%E6%B7%BB%E5%8A%A0p/1.htm">html添加p</a><a class="tag" taget="_blank" href="/search/appendChild/1.htm">appendChild</a>
                        <div>javascript添加p元素,html添加文字,appendChild。网页添加p元素效果截图。个人签名:游志勇,预制板,南托岭预制场。文字展示#wordsadd{font-size:70px;word-break:break-all;}#wordsaddp{margin:002px0;padding:002px0;line-height:93%;}.btn_width{width:90px;}</div>
                    </li>
                    <li><a href="/article/1835136018660028416.htm"
                           title="CesiumJS+SuperMap3D.js混用实现可视域分析 S3M图层加载 裁剪区域绘制" target="_blank">CesiumJS+SuperMap3D.js混用实现可视域分析 S3M图层加载 裁剪区域绘制</a>
                        <span class="text-muted">SteveJi666</span>
<a class="tag" taget="_blank" href="/search/WebGL/1.htm">WebGL</a><a class="tag" taget="_blank" href="/search/cesium/1.htm">cesium</a><a class="tag" taget="_blank" href="/search/EarthSDK/1.htm">EarthSDK</a><a class="tag" taget="_blank" href="/search/SuperMap/1.htm">SuperMap</a><a class="tag" taget="_blank" href="/search/3d/1.htm">3d</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/arcgis/1.htm">arcgis</a>
                        <div>版本简介:cesium:1.99;Supermap3D:SuperMapiClientJavaScript11i(2023);官方下载文档链家:SuperMap技术资源中心|为您提供全面的在线技术服务示例参考:support.supermap.com.cn:8090/webgl/Cesium/examples/webgl/examples.html#analysissupport.supermap</div>
                    </li>
                    <li><a href="/article/1835131605585326080.htm"
                           title="html打开本地excel文件夹,html使用excel表格数据库-html读取本地excel文件并展示" target="_blank">html打开本地excel文件夹,html使用excel表格数据库-html读取本地excel文件并展示</a>
                        <span class="text-muted">睿理</span>

                        <div>html表格如何导入到excel中在vs里面用添加数据源就可以啊,再使用数据控件,就可以操作.添加数据源可以用odbc数据源,两种方式1,是在控制面板的管理工具里在ODBC里先设置好.2,是使用连接字符串.用vs的添加数据源向导做.html中有没有类似excel表格,可以填数的表格控件?首先html不能读取本地excel文件其次就算是javascript也是不允许的这是为了安全考虑如果前端脚本可以</div>
                    </li>
                    <li><a href="/article/1835131225128398848.htm"
                           title="如何在 Python 中声明一个静态属性?" target="_blank">如何在 Python 中声明一个静态属性?</a>
                        <span class="text-muted">潮易</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在Python中,静态属性的定义和使用方式与JavaScript中的类似,主要是通过`@staticmethod`装饰器来实现。静态属性不需要实例化对象就可以访问,它们属于类本身。###如何声明一个静态属性:1.首先,需要在属性名前添加`@staticmethod`装饰器。2.接下来,定义一个普通方法,该方法的第一个参数通常为`cls`(用于表示类的引用)。###代码示例:```pythoncla</div>
                    </li>
                    <li><a href="/article/1835125415920889856.htm"
                           title="数据格式:什么是JSON和XML" target="_blank">数据格式:什么是JSON和XML</a>
                        <span class="text-muted">isNotNullX</span>
<a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a>
                        <div>JSON和XML都是数据交换的一种格式,用于在不同的系统和应用程序之间传输和存储数据。本文将解释JSON和XML的基础内容,并探讨两者的不同。一·什么是JSON?1.JSON(JavaScriptObjectNotation)即JavaScript对象标记法:-JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。-JSON基于JavaScript的一个子集,但JSON是</div>
                    </li>
                    <li><a href="/article/1835118231979913216.htm"
                           title="HighCharts图表自动化简介" target="_blank">HighCharts图表自动化简介</a>
                        <span class="text-muted">知识的宝藏</span>
<a class="tag" taget="_blank" href="/search/Selenium%E9%AB%98%E7%BA%A7%E7%AF%87/1.htm">Selenium高级篇</a><a class="tag" taget="_blank" href="/search/Selenium%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">Selenium图表自动化测试</a><a class="tag" taget="_blank" href="/search/highcharts%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">highcharts图表自动化</a><a class="tag" taget="_blank" href="/search/Selenium%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">Selenium图表自动化</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">图表自动化测试</a><a class="tag" taget="_blank" href="/search/highcharts/1.htm">highcharts</a><a class="tag" taget="_blank" href="/search/Selenium/1.htm">Selenium</a>
                        <div>什么是分析数据?在任何应用程序中捕获并以图形或图表形式显示的分析数据是任何产品或系统的关键部分,因为它提供了对实时数据的洞察。验证此类分析数据非常重要,因为不准确的数据可能会在报告中产生问题,并可能影响应用程序/系统的其他相关领域。什么是HighChart?Highcharts是一个用纯JavaScript编写的j基于SVG成图技术的图表库,提供了一种简单的方法来向您的网站或Web应用程序添加交互</div>
                    </li>
                                <li><a href="/article/87.htm"
                                       title="面向对象面向过程" target="_blank">面向对象面向过程</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>面向对象:把要完成的一件事,通过对象间的协作实现。 
面向过程:把要完成的一件事,通过循序依次调用各个模块实现。 
我把大象装进冰箱这件事为例,用面向对象和面向过程实现,都是用java代码完成。 
 
1、面向对象 
 

package bigDemo.ObjectOriented;

/**
 * 大象类
 * 
 * @Description
 * @author FuJian</div>
                                </li>
                                <li><a href="/article/214.htm"
                                       title="Java Hotspot: Remove the Permanent Generation" target="_blank">Java Hotspot: Remove the Permanent Generation</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/HotSpot/1.htm">HotSpot</a>
                                    <div>  
openjdk上关于hotspot将移除永久带的描述非常详细,http://openjdk.java.net/jeps/122 
  
JEP 122: Remove the Permanent Generation

Author	Jon Masamitsu
Organization	Oracle
Created	2010/8/15
Updated	2011/</div>
                                </li>
                                <li><a href="/article/341.htm"
                                       title="正则表达式向前查找向后查找,环绕或零宽断言" target="_blank">正则表达式向前查找向后查找,环绕或零宽断言</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a>
                                    <div>向前查找和向后查找 
1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向前查找断言。 
    对于向前查找,出现在指定项之后的字符序列不会被正则表达式引擎返回。 
2. 向后查找:一个要匹配的字符序列前面有或者没有指定的</div>
                                </li>
                                <li><a href="/article/468.htm"
                                       title="BaseDao" target="_blank">BaseDao</a>
                                    <span class="text-muted">171815164</span>
<a class="tag" taget="_blank" href="/search/seda/1.htm">seda</a>
                                    <div>

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class BaseDao {

	public Conn</div>
                                </li>
                                <li><a href="/article/595.htm"
                                       title="Ant标签详解--Java命令" target="_blank">Ant标签详解--Java命令</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/Java%E5%91%BD%E4%BB%A4/1.htm">Java命令</a>
                                    <div>        这一篇主要介绍与java相关标签的使用          终于开始重头戏了,Java部分是我们关注的重点也是项目中用处最多的部分。               
1</div>
                                </li>
                                <li><a href="/article/722.htm"
                                       title="[简单]代码片段_电梯数字排列" target="_blank">[简单]代码片段_电梯数字排列</a>
                                    <span class="text-muted">53873039oycg</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a>
                                    <div>       今天看电梯数字排列是9 18 26这样呈倒N排列的,写了个类似的打印例子,如下:       
import java.util.Arrays;

public class 电梯数字排列_S3_Test {
	public static void main(S</div>
                                </li>
                                <li><a href="/article/849.htm"
                                       title="Hessian原理" target="_blank">Hessian原理</a>
                                    <span class="text-muted">云端月影</span>
<a class="tag" taget="_blank" href="/search/hessian%E5%8E%9F%E7%90%86/1.htm">hessian原理</a>
                                    <div>Hessian 原理分析 
 
 
 
 
 
一.      远程通讯协议的基本原理 
 
网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协</div>
                                </li>
                                <li><a href="/article/976.htm"
                                       title="区分Activity的四种加载模式----以及Intent的setFlags" target="_blank">区分Activity的四种加载模式----以及Intent的setFlags</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>  
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。 
这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置 
Activity有四种加载模式: 
 
 standard 
 singleTop</div>
                                </li>
                                <li><a href="/article/1103.htm"
                                       title="hibernate几个核心API及其查询分析" target="_blank">hibernate几个核心API及其查询分析</a>
                                    <span class="text-muted">antonyup_2006</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/1.htm">配置管理</a>
                                    <div>(一)  org.hibernate.cfg.Configuration类 
        读取配置文件并创建唯一的SessionFactory对象.(一般,程序初始化hibernate时创建.) 
        Configuration co</div>
                                </li>
                                <li><a href="/article/1230.htm"
                                       title="PL/SQL的流程控制" target="_blank">PL/SQL的流程控制</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%BC%96%E7%A8%8B/1.htm">PL/SQL编程</a><a class="tag" taget="_blank" href="/search/%E5%BE%AA%E7%8E%AF%E6%8E%A7%E5%88%B6/1.htm">循环控制</a>
                                    <div>PL/SQL也是一门高级语言,所以流程控制是必须要有的,oracle数据库的pl/sql比sqlserver数据库要难,很多pl/sql中有的sqlserver里面没有 
  
流程控制; 
   分支语句 if 条件 then 结果 else 结果  end if ;

  条件语句 case    when   条件  then  结果;

   循环语句  loop    </div>
                                </li>
                                <li><a href="/article/1357.htm"
                                       title="强大的Mockito测试框架" target="_blank">强大的Mockito测试框架</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a>
                                    <div>一.自动生成Mock类        在需要Mock的属性上标记@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中显示调用MockitoAnnotations.initMocks(this);生成Mock类即可。二.自动注入Mock类到被测试类  &nbs</div>
                                </li>
                                <li><a href="/article/1484.htm"
                                       title="精通Oracle10编程SQL(11)开发子程序" target="_blank">精通Oracle10编程SQL(11)开发子程序</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *开发子程序
 */
--子程序目是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用程序中多次调用
--PL/SQL有两种类型的子程序:过程和函数
--开发过程
--建立过程:不带任何参数
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
 DBMS_OUTPUT.put_line(systimestamp);
E</div>
                                </li>
                                <li><a href="/article/1611.htm"
                                       title="【EhCache一】EhCache版Hello World" target="_blank">【EhCache一】EhCache版Hello World</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Hello+world/1.htm">Hello world</a>
                                    <div>本篇是EhCache系列的第一篇,总体介绍使用EhCache缓存进行CRUD的API的基本使用,更细节的内容包括EhCache源代码和设计、实现原理在接下来的文章中进行介绍 
  环境准备 
1.新建Maven项目 
  
2.添加EhCache的Maven依赖 
        <dependency>
            <groupId>ne</div>
                                </li>
                                <li><a href="/article/1738.htm"
                                       title="学习EJB3基础知识笔记" target="_blank">学习EJB3基础知识笔记</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/jboss/1.htm">jboss</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a><a class="tag" taget="_blank" href="/search/ejb/1.htm">ejb</a>
                                    <div>最近项目进入系统测试阶段,全赖袁大虾领导有力,保持一周零bug记录,这也让自己腾出不少时间补充知识。花了两天时间把“传智播客EJB3.0”看完了,EJB基本的知识也有些了解,在这记录下EJB的部分知识,以供自己以后复习使用。 
  
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基</div>
                                </li>
                                <li><a href="/article/1865.htm"
                                       title="angular.bootstrap" target="_blank">angular.bootstrap</a>
                                    <span class="text-muted">boyitech</span>
<a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/AngularJS+API/1.htm">AngularJS API</a><a class="tag" taget="_blank" href="/search/angular%E4%B8%AD%E6%96%87api/1.htm">angular中文api</a>
                                    <div>angular.bootstrap 
描述:  
    手动初始化angular。 
    这个函数会自动检测创建的module有没有被加载多次,如果有则会在浏览器的控制台打出警告日志,并且不会再次加载。这样可以避免在程序运行过程中许多奇怪的问题发生。 
    使用方法:       angular .</div>
                                </li>
                                <li><a href="/article/1992.htm"
                                       title="java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数" target="_blank">java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class SearchInShiftedArray {

	/**
	 * 题目:给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。
	 * 请在这个特殊数组中找出给定的整数。
	 * 解答:
	 * 其实就是“旋转数组”。旋转数组的最小元素见http://bylijinnan.iteye.com/bl</div>
                                </li>
                                <li><a href="/article/2119.htm"
                                       title="天使还是魔鬼?都是我们制造" target="_blank">天使还是魔鬼?都是我们制造</a>
                                    <span class="text-muted">ducklsl</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a><a class="tag" taget="_blank" href="/search/%E6%95%99%E8%82%B2/1.htm">教育</a><a class="tag" taget="_blank" href="/search/%E6%83%85%E6%84%9F/1.htm">情感</a>
                                    <div>----------------------------剧透请原谅,有兴趣的朋友可以自己看看电影,互相讨论哦!!! 
    从厦门回来的动车上,无意中瞟到了书中推荐的几部关于儿童的电影。当然,这几部电影可能会另大家失望,并不是类似小鬼当家的电影,而是关于“坏小孩”的电影! 
    自己挑了两部先看了看,但是发现看完之后,心里久久不能平</div>
                                </li>
                                <li><a href="/article/2246.htm"
                                       title="[机器智能与生物]研究生物智能的问题" target="_blank">[机器智能与生物]研究生物智能的问题</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9/1.htm">生物</a>
                                    <div> 
 
      我想,人的神经网络和苍蝇的神经网络,并没有本质的区别...就是大规模拓扑系统和中小规模拓扑分析的区别.... 
 
 
      但是,如果去研究活体人类的神经网络和脑系统,可能会受到一些法律和道德方面的限制,而且研究结果也不一定可靠,那么希望从事生物神经网络研究的朋友,不如把</div>
                                </li>
                                <li><a href="/article/2373.htm"
                                       title="获取Android Device的信息" target="_blank">获取Android Device的信息</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>
String phoneInfo = "PRODUCT: " + android.os.Build.PRODUCT;
phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
phoneInfo += ", TAGS: " + android.os.Build.TAGS;
ph</div>
                                </li>
                                <li><a href="/article/2500.htm"
                                       title="最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现" target="_blank">最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D/1.htm">字符串匹配</a>
                                    <div>原文:http://www.javacodegeeks.com/2013/11/java-implementation-of-optimal-string-alignment.html------------------------------------------------------------------------------------------------------------</div>
                                </li>
                                <li><a href="/article/2627.htm"
                                       title="小学5年级英语单词背诵第一课" target="_blank">小学5年级英语单词背诵第一课</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>long 长的 
show 给...看,出示 
mouth 口,嘴 
write 写 
  
use 用,使用 
take 拿,带来 
hand 手 
clever 聪明的 
  
often 经常 
wash 洗 
slow 慢的 
house 房子 
  
water 水 
clean 清洁的 
supper 晚餐 
out 在外 
  
face 脸,</div>
                                </li>
                                <li><a href="/article/2754.htm"
                                       title="macvim的使用实战" target="_blank">macvim的使用实战</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a>
                                    <div>macvim用的是mac里面的vim, 只不过是一个GUI的APP, 相当于一个壳 
  
1. 下载macvim 
https://code.google.com/p/macvim/ 
  
2. 了解macvim 
:h               vim的使用帮助信息 
:h macvim  </div>
                                </li>
                                <li><a href="/article/2881.htm"
                                       title="java二分法查找" target="_blank">java二分法查找</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/java%E4%BA%8C%E5%88%86%E6%B3%95%E6%9F%A5%E6%89%BE/1.htm">java二分法查找</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%88%86%E6%B3%95/1.htm">二分法</a><a class="tag" taget="_blank" href="/search/java%E4%BA%8C%E5%88%86%E6%B3%95/1.htm">java二分法</a>
                                    <div>java二分法查找 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
蕃薯耀 2015年6月23日 11:40:03 星期二 
http:/</div>
                                </li>
                                <li><a href="/article/3008.htm"
                                       title="Spring Cache注解+Memcached" target="_blank">Spring Cache注解+Memcached</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/memcached/1.htm">memcached</a>
                                    <div>Spring3.1 Cache注解  
依赖jar包: 
<!-- simple-spring-memcached -->
		<dependency>
			<groupId>com.google.code.simple-spring-memcached</groupId>
			<artifactId>simple-s</div>
                                </li>
                                <li><a href="/article/3135.htm"
                                       title="apache commons io包快速入门" target="_blank">apache commons io包快速入门</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/apache+commons/1.htm">apache commons</a>
                                    <div>原文参考 
http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html 
 
  Apache Commons IO 包绝对是好东西,地址在http://commons.apache.org/proper/commons-io/,下面用例子分别介绍: 
  1)  工具类 
  2</div>
                                </li>
                                <li><a href="/article/3262.htm"
                                       title="如何学习编程" target="_blank">如何学习编程</a>
                                    <span class="text-muted">lampcy</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div>首先,我想说一下学习思想.学编程其实跟网络游戏有着类似的效果.开始的时候,你会对那些代码,函数等产生很大的兴趣,尤其是刚接触编程的人,刚学习第一种语言的人.可是,当你一步步深入的时候,你会发现你没有了以前那种斗志.就好象你在玩韩国泡菜网游似的,玩到一定程度,每天就是练级练级,完全是一个想冲到高级别的意志力在支持着你.而学编程就更难了,学了两个月后,总是觉得你好象全都学会了,却又什么都做不了,又没有</div>
                                </li>
                                <li><a href="/article/3389.htm"
                                       title="架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy" target="_blank">架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy</a>
                                    <span class="text-muted">nannan408</span>
<a class="tag" taget="_blank" href="/search/Spring3/1.htm">Spring3</a>
                                    <div>1.前言。 
   如题。 
2.描述。 
   


@DependsOn用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean。

@DependsOn({"steelAxe","abc"})
@Comp</div>
                                </li>
                                <li><a href="/article/3516.htm"
                                       title="Spring4+quartz2的配置和代码方式调度" target="_blank">Spring4+quartz2的配置和代码方式调度</a>
                                    <span class="text-muted">Everyday都不同</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE/1.htm">配置</a><a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a><a class="tag" taget="_blank" href="/search/quartz2.x/1.htm">quartz2.x</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1/1.htm">定时任务</a>
                                    <div>前言:这些天简直被quartz虐哭。。因为quartz 2.x版本相比quartz1.x版本的API改动太多,所以,只好自己去查阅底层API…… 
  
quartz定时任务必须搞清楚几个概念: 
JobDetail——处理类 
Trigger——触发器,指定触发时间,必须要有JobDetail属性,即触发对象 
Scheduler——调度器,组织处理类和触发器,配置方式一般只需指定触发</div>
                                </li>
                                <li><a href="/article/3643.htm"
                                       title="Hibernate入门" target="_blank">Hibernate入门</a>
                                    <span class="text-muted">tntxia</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>  
前言 
  
使用面向对象的语言和关系型的数据库,开发起来很繁琐,费时。由于现在流行的数据库都不面向对象。Hibernate 是一个Java的ORM(Object/Relational Mapping)解决方案。 
  
Hibernte不仅关心把Java对象对应到数据库的表中,而且提供了请求和检索的方法。简化了手工进行JDBC操作的流程。 
  
如</div>
                                </li>
                                <li><a href="/article/3770.htm"
                                       title="Math类" target="_blank">Math类</a>
                                    <span class="text-muted">xiaoxing598</span>
<a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a>
                                    <div>一、Java中的数字(Math)类是final类,不可继承。 
1、常数    PI:double圆周率 E:double自然对数    
2、截取(注意方法的返回类型)    double ceil(double d) 返回不小于d的最小整数 double floor(double d) 返回不大于d的整最大数   int round(float f) 返回四舍五入后的整数 long round</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>