如何获得美元符号之间的价值?

我试图获取字符串中的美元符号之间的值,并将它们放在列表中。

例如,这是一个字符串:

var a ='Dear $name$, This is my number $number$. This is my address $address$ Thank you!' 

而我想得到的是,

 var b = '$name$,$number$,$address$' 

我是否必须关注字符串中的’$’,因为$也用于jQuery? 你有什么想法吗?

使用match

 a.match(/\$.*?\$/g); 

这将返回包含所有值的数组。 你也可以使用

 a.match(/\$.*?\$/g)||[]; 

确保你总是得到一个数组,因为如果没有匹配你就会得到一个并不总是有用的null对象。

RegExp也在我的回答中解释了类似的问题:匹配任何( . ),任意次数( * ),尽可能少的次数( ? )。

然后,您可以使用join将该Array加入String:

 (a.match(/\$.*?\$/g)||[]).join(','); 

码:

 var a='Dear $name$, This is my number $number$. This is my address $address$ Thank you!'; var b=(a.match(/\$.*?\$/g)||[]).join(','); 

输出:

"$name$,$number$,$address$"

实际上,在这种情况下,正则表达式匹配每个$后跟任何直到下一个$ ,最后是美元符号。 如果在结尾指定g (全局)标志, match将给出结果列表。

由于这是一个字符串(以及上面的正则表达式)文字,因此不会干扰jQuery的$符号。 唯一重要的是用反斜杠( \$ )来逃避该符号,因为它在RegExp中具有特殊含义。

与正则表达式匹配:

 var matches = a.match(/\$\w+\$/g); 

返回一个匹配数组,所以只需加入逗号:

 var b = matches.join(','); 

基本上你需要分割和切片。 我做了一个JSFiddle来展示它是如何完成的。

这是jQuery来完成你想要的。

 var a = 'Dear $name$, This is my number $number$. This is my address $address$ Thank you!'; var b = []; var count = 0; var split = a.split(" "); for (var i = 0; i < split.length; i++) { if (split[i].charAt(0) == "$") { b[count] = split[i].slice(0, $.inArray("$", split[i], 2)) + "$"; count++; } }