JavaScript正则判断字符串结尾返回false及传参咨询
代码错误原因
你的逻辑返回false的核心问题是:正则字面量不会解析内部的变量标识符。
- 代码中写的
/target$/是写死的固定正则,作用是匹配以字面量字符串target结尾的内容,这里面的target就是普通的6个英文字符,完全不会引用函数传入的第二个参数target。 - 执行
confirmEnding("Bastian","n")时,正则实际校验的是字符串是否以target六个字符结尾,和你传入的目标值n毫无关联,自然返回错误结果。
修正写法
如果要基于传入的动态参数生成正则,不能使用/xxx/的正则字面量语法,需要通过RegExp构造函数创建正则实例:
function confirmEnding(str, target) { // 若target包含.、*、$等正则特殊元字符,需要提前做转义处理,避免匹配逻辑异常 const endReg = new RegExp(`${target}$`) return endReg.test(str) }
补充:判断字符串结尾不需要手写正则,直接调用字符串原生方法
str.endsWith(target)即可实现完全相同的效果,代码更简洁也不需要处理正则转义问题。
正则能否作为函数参数传入
可以。JavaScript中的正则表达式是RegExp类型的对象,属于语言中的一等值,和字符串、数字、普通对象一样,支持作为参数传入函数、作为函数返回值、赋值给变量等操作。
传入正则作为参数的示例:
function checkStr(str, regRule) { return regRule.test(str) } // 直接传入正则字面量作为参数 checkStr("Bastian", /n$/) // 返回true
内容的提问来源于stack exchange,提问作者nadia12221
相关产品推荐
相关产品推荐

