最近开始学习AIGC相关的课程,我会在这里持续记录我自己的学习心得体会。
ChatGPT 作为加强版搜索引擎,可以直接为我们节约很多反复搜索和调整的时间,只需要需求或者代码给到 chatgpt 后,给出对应的指令
1. 编写代码
比如,我要写一个正则表达式,接告诉 ChatGPT 我的需求。
例子:
提供一个 js 正则表达式,"abc"或者"cba"开头,中间部分全部数字,结尾不为 0
以下是 ChatGPT 的回答:
以下是一个满足您要求的 JavaScript 正则表达式:
;/^(abc|cba)\d*[1-9]$/解释:
^表示匹配字符串的开头。(abc|cba)表示匹配字符串以 "abc" 或 "cba" 开头。\d*表示匹配零个或多个数字。[1-9]表示匹配一个非零数字。$表示匹配字符串的结尾。因此,上述正则表达式可以匹配以 "abc" 或 "cba" 开头,中间部分为任意数字,结尾为非零数字的字符串。
这里我们就从自然语言得到了程序语言代码/^(abc|cba)\d*[1-9]$/
2. 多次生成与调整
如果对 ChatGPT 的内容不满意可以让它再写一次,并做细微微调
再写一个,与之前的不一样
回答如下:
以下是另一个满足您要求的 JavaScript 正则表达式:
;/^(abc|cba)\d+[1-9]$/解释:
^表示匹配字符串的开头。(abc|cba)表示匹配字符串以 "abc" 或 "cba" 开头。\d+表示匹配一个或多个数字。[1-9]表示匹配一个非零数字。$表示匹配字符串的结尾。因此,上述正则表达式可以匹配以 "abc" 或 "cba" 开头,中间部分为至少一个数字,结尾为非零数字的字符串。
这里生成的内容,并不能满足我的需求,我需要中间可以没有数字
有 bug,中间可以没有数字
回答:
非常抱歉,对于中间部分可以没有数字的要求,以下是修正后的 JavaScript 正则表达式:
;/^(abc|cba)\d*?[1-9]$/解释:
^表示匹配字符串的开头。(abc|cba)表示匹配字符串以 "abc" 或 "cba" 开头。\d*?表示匹配零个或多个数字,但是使用非贪婪匹配,即尽可能少地匹配数字。[1-9]表示匹配一个非零数字。$表示匹配字符串的结尾。因此,上述正则表达式可以匹配以 "abc" 或 "cba" 开头,中间部分可以> 没有数字,结尾为非零数字的字符串。
3. 代码解释
上述代码中,我看不懂\d*?,于是让 ChatGPT 解释
\d*?,代码解释
回答:
非常抱歉,我之前的解释有误。正则表达式中的
\d*?并不是正确的表达式。正确的修正版本如下:
;/^(abc|cba)(\d*[1-9])?$/解释:
^表示匹配字符串的开头。(abc|cba)表示匹配字符串以 "abc" 或 "cba" 开头。(\d*[1-9])?表示一个可选的组,其中包括零个或多个数字(\d*),后跟一个非零数字([1-9])。这样可以实现中间部分可以没有数字的要求。$表示匹配字符串的结尾。因此,上述正则表达式可以匹配以 "abc" 或 "cba" 开头,中间部分可以没有数字,结尾为非零数字的字符串。
4. 举例子
ChatGPT 最好的一个功能就是你可以让它对你当前代码举个例子
声明一个变量获取该正则表达式,同时举个例子来使用它
回答:
在 JavaScript 中,您可以使用正则表达式字面量或者
RegExp构造函数来声明一个变量并获取该正则表达式。下面是示例代码:// 使用正则表达式字面量声明变量 var regex = /^(abc|cba)(\d*[1-9])?$/ // 或者使用 RegExp 构造函数声明变量 // var regex = new RegExp("^(abc|cba)(\\d*[1-9])?$"); // 示例使用 var string1 = "abc123" // 匹配的例子 var string2 = "cba" // 匹配的例子 var string3 = "abc0123" // 不匹配的例子 var string4 = "cba0" // 不匹配的例子 console.log(regex.test(string1)) // 输出: true console.log(regex.test(string2)) // 输出: true console.log(regex.test(string3)) // 输出: false console.log(regex.test(string4)) // 输出: false在上述示例中,我们声明了一个名为
regex的变量,并使用正则表达式字面量的方式给它赋值。然后,我们使用regex.test(string)方法来测试不同的字符串是否与正则表达式匹配。根据正则表达式的规则,只有字符串string1和string2会匹配,而string3和string4不会匹配。通过调用regex.test(string),我们可以得到相应的布尔值来表示匹配结果。
4. 修复 bug
由于 ChatGPT 只是语言文本生成器,对代码的正确性无法保证,我们可以手动运行后,将结果告知 ChatGPT 修复 bug
string3 有误,请修改
回答:
非常抱歉,对于例子中的
string3有误。根据您的要求,结尾部分不应为零,所以string3应该匹配。以下是修正后的示例代码:// 使用正则表达式字面量声明变量 var regex = /^(abc|cba)(\d*[1-9])?$/ // 示例使用 var string1 = "abc123" // 匹配的例子 var string2 = "cba" // 匹配的例子 var string3 = "abc0123" // 匹配的例子 var string4 = "cba0" // 不匹配的例子 console.log(regex.test(string1)) // 输出: true console.log(regex.test(string2)) // 输出: true console.log(regex.test(string3)) // 输出: true console.log(regex.test(string4)) // 输出: false在修正后的代码中,
string3现在符合正则表达式的要求,因为它以 "abc" 开头,中间部分可以没有数字,结尾为非零数字。因此,regex.test(string3)的输出将为true。
5. 生成测试用例和测试数据
接下来给代码加上测试用例
为正则表达式写测试用例和并生成测试数据
回答:
当为正则表达式编写测试用例时,可以考虑以下情况:
正确匹配的情况:
- 包含 "abc" 或 "cba" 开头,中间部分可以没有数字,结尾为非零数字。
- 示例: "abc123", "cba456", "abc", "cba1"
不匹配的情况:
- 不以 "abc" 或 "cba" 开头。
- 中间部分包含数字但结尾为零。
- 示例: "xyz123", "cba0", "abc0123"
以下是一个 JavaScript 函数,可以生成随机测试数据并进行匹配测试:
function testRegex(regex) { const validExamples = ["abc123", "cba456", "abc", "cba1"] const invalidExamples = ["xyz123", "cba0", "abc0123"] // 测试正确匹配的情况 console.log("=== 正确匹配的测试 ===") validExamples.forEach((example) => { const match = regex.test(example) console.log(`${example}: ${match}`) }) // 测试不匹配的情况 console.log("\n=== 不匹配的测试 ===") invalidExamples.forEach((example) => { const match = regex.test(example) console.log(`${example}: ${match}`) }) } // 使用正则表达式字面量进行测试 var regex = /^(abc|cba)(\d*[1-9])?$/ testRegex(regex)通过调用
testRegex(regex),我们可以使用给定的正则表达式对测试数据进行匹配测试,并输出匹配结果。在示例中,已提供了一些符合和不符合要求的测试数据。您也可以根据需要添加更多的测试数据或调整正则表达式,以便进行更全面的测试。
6. 添加注释
让 ChatGPT 为你的代码添加注释
添加注释
回答:
以下是带有注释的 JavaScript 代码,用于生成测试数据并进行匹配测试:
function testRegex(regex) { // 符合要求的示例 const validExamples = [ "abc123", // 以 "abc" 开头,中间部分包含数字,结尾为非零数字 "cba456", // 以 "cba" 开头,中间部分包含数字,结尾为非零数字 "abc", // 以 "abc" 开头,中间部分没有数字,结尾为非零数字 "cba1", // 以 "cba" 开头,中间部分没有数字,结尾为非零数字 ] // 不符合要求的示例 const invalidExamples = [ "xyz123", // 不以 "abc" 或 "cba" 开头 "cba0", // 以 "cba" 开头,中间部分包含数字,结尾为零 "abc0123", // 以 "abc" 开头,中间部分包含数字,结尾为零 ] // 测试正确匹配的情况 console.log("=== 正确匹配的测试 ===") validExamples.forEach((example) => { const match = regex.test(example) console.log(`${example}: ${match}`) }) // 测试不匹配的情况 console.log("\n=== 不匹配的测试 ===") invalidExamples.forEach((example) => { const match = regex.test(example) console.log(`${example}: ${match}`) }) } // 使用正则表达式字面量进行测试 var regex = /^(abc|cba)(\d*[1-9])?$/ testRegex(regex)上述代码中的注释对不同部分进行了解释和说明。函数
testRegex()用于接收一个正则表达式并进行测试。validExamples和invalidExamples数组分别包含符合要求和不符合要求的示例字符串。通过forEach循环遍历数组,并使用正则表达式的test()方法进行匹配测试。最终,会将每个示例字符串及其匹配结果输出到控制台。这样,您可以根据正则表达式的规则和要求,自定义示例字符串和测试用例,并通过运行代码进行匹配测试。
当然上述代码还有 bug,还需要用户手动调整,但是通过如上例子,我们确实可以用 ChatGPT 强化我们日常开发的能力
总结
ChatGPT无非是个内容生成器,这个内容自然包括了代码,只要给定合适的指令,就可以得到或者接近我们想要的答案,还有其他比如代码优化等功能,例子所限就不展开了。