如何将ChatGPT用于实际开发工作

1,572 阅读4分钟

最近开始学习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) 方法来测试不同的字符串是否与正则表达式匹配。根据正则表达式的规则,只有字符串 string1string2 会匹配,而 string3string4 不会匹配。通过调用 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. 生成测试用例和测试数据

接下来给代码加上测试用例

为正则表达式写测试用例和并生成测试数据

回答:

当为正则表达式编写测试用例时,可以考虑以下情况:

  1. 正确匹配的情况:

    • 包含 "abc" 或 "cba" 开头,中间部分可以没有数字,结尾为非零数字。
    • 示例: "abc123", "cba456", "abc", "cba1"
  2. 不匹配的情况:

    • 不以 "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() 用于接收一个正则表达式并进行测试。validExamplesinvalidExamples 数组分别包含符合要求和不符合要求的示例字符串。通过 forEach 循环遍历数组,并使用正则表达式的 test() 方法进行匹配测试。最终,会将每个示例字符串及其匹配结果输出到控制台。

这样,您可以根据正则表达式的规则和要求,自定义示例字符串和测试用例,并通过运行代码进行匹配测试。

当然上述代码还有 bug,还需要用户手动调整,但是通过如上例子,我们确实可以用 ChatGPT 强化我们日常开发的能力

总结

ChatGPT无非是个内容生成器,这个内容自然包括了代码,只要给定合适的指令,就可以得到或者接近我们想要的答案,还有其他比如代码优化等功能,例子所限就不展开了。