如何获得美元符号之间的价值?
我试图获取字符串中的美元符号之间的值,并将它们放在列表中。
例如,这是一个字符串:
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++; } }