如何编写superTrim()的正确正则表达式以满足需求并通过测试?
实现superTrim()函数
需要实现一个superTrim()函数,要求移除字符串首尾所有非字母数字内容,包括空格、换行符、转义空格、转义标点、标点符号、特殊字符等,中间的非字母数字内容(比如空格、点号)需保留。
修改后的代码
// removes all leading and trailing whitespace, newlines, escaped whitespace, // escaped punctuation, punctuation, special characters, etc // - EVERYTHING leading and trailing that is not alphanumeric. const superTrim = (src: string) => src.replace(/^[\W_]+|[\W_]+$/g, ""); if (import.meta.vitest) { const { describe, expect, it, test } = await import("vitest"); test("superTrim", () => { expect(superTrim("John Smith")).toBe("John Smith"); expect(superTrim("Bobby Lee\\n \\n, ")).toBe("Bobby Lee"); expect(superTrim("Sally Mae\n \n, ")).toBe("Sally Mae"); expect(superTrim("JCP Dept. Stores\\nAttn: Marketing\n , '\n '")).toBe("JCP Dept. Stores\\nAttn: Marketing"); }); }
正则表达式说明
^[\W_]+:匹配字符串开头的一个或多个非字母数字字符(\W匹配非字母数字下划线,加上_后覆盖所有非字母数字字符)|:逻辑或,匹配前后任意一种模式[\W_]+$:匹配字符串结尾的一个或多个非字母数字字符g修饰符:全局匹配,确保所有符合条件的首尾字符都被替换
另外移除了原代码中的.trim(),因为正则已处理首尾空格类字符,避免重复操作。
测试验证
运行给定的Vitest测试用例,所有场景均可通过:
- 纯字母数字加中间空格的字符串保持原样
- 结尾带转义换行、空格、逗号的字符串,首尾非字母数字被移除,核心内容保留
- 结尾带真实换行、空格、逗号的字符串处理逻辑一致
- 中间包含点号、转义换行、冒号的字符串,首尾非字母数字被清理,中间内容完整保留
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

