如何用JavaScript RegExp构造函数编写匹配含Y且以X结尾的正则?
解决包含指定字符串且以指定字符串结尾的正则问题
你之前的代码有两个问题导致匹配失败:
- 转义错误:你写的
\$会让正则把$当成普通字符,而不是用来标记字符串结尾的锚点,自然匹配不上以e结尾的字符串。 - 结构缺失:直接写
${endsWith}\$的话,正则只会匹配**刚好等于endsWith且包含contains**的字符串,但你的目标字符串(比如'ate')长度比endsWith长,所以匹配失败。
正确代码
只需要修正转义问题,同时加上.*来匹配结尾锚点前的任意字符,再用^和$限定整个字符串范围即可:
const endsWith = 'e' const contains = 'te' const re = new RegExp(`^(?=.*${contains}).*${endsWith}$`) re.test('ate') // Result = true re.test('steve') // Result = true
进阶:处理特殊字符
如果endsWith或contains里包含正则特殊字符(比如.、*这类),需要先转义这些字符,避免正则逻辑出错:
// 正则特殊字符转义函数 function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } const endsWith = 'e' const contains = 'te' const re = new RegExp(`^(?=.*${escapeRegExp(contains)}).*${escapeRegExp(endsWith)}$`) re.test('ate') // true re.test('steve') // true
内容的提问来源于stack exchange,提问作者Syed Hussain Abbas EB20_127
相关产品推荐
相关产品推荐

