正则表达式匹配字符串`\$`而不匹配单独的字符`$`,怎么写呢?

取两个$之间的字符串,两个$之间可以包含任意字符串包括 \$,但是不包含单独的 $ 字符

var str1 = 'eee$aaa$bbb$rrr'
// 取两个 $ 之间的字符串
// 希望通过正则得到 `aaa`

var str2 = 'eee$aaa\$bbb$rrr'
// 取两个 $ 之间的字符串
// 希望通过正则得到 `aaa\$bbb`

怎么匹配 \$ 但是不匹配单独的 $ 呢?

阅读 3.6k
4 个回答

假设 题主 str2 给错了,那么答案如下:

const reg=/\$([\s\S]*?[^\\])\$/;
let str1 = 'eee$aaa$bbb$rrr';
let str2 = 'eee$aaa\\$bbb$rrr';//假设题主给错了
let str3 = 'eee$aaa\$bbb$rrr';//假设题主没给错
console.log(str1.match(reg)[1],str2.match(reg)[1],str3.match(reg)[1]);//aaa,aaa\$bbb,aaa

如果题主答案没给错,str3 和 str1 是一致的,因为 \ 会被自动转译掉,就是说:

console.log(str1 ===str3)//true;

但是无论如何,上面的正则都是可以的;

const reg  = /\/\$/g
reg.test('eee$') // fasle
reg.test('aaa/$') // true

不知道这个能否满足要求, /([a-z]*(\\\$)+[a-z]*)+|[a-z]+/g

clipboard.png

\$(\w|\\\$)*?\$
推荐问题