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

时间:2015-04-16 17:18:14

标签: javascript jquery regex

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

例如,这是一个字符串:

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

我想得到的是,

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

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

3 个答案:

答案 0 :(得分:11)

使用match

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

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

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

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

RegExp也在answer of mine中针对类似问题进行了解释:匹配任何内容(.),任意次数(*),尽可能少({{3}} 1}})。

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

join

代码:

(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$",后跟任何内容,直到下一个$,最后是美元符号。如果您在结尾处指定$(全局)标记,则match会给出结果列表。

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

答案 1 :(得分:0)

与正则表达式匹配:

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

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

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

答案 2 :(得分:0)

基本上你需要分割和切片。我做了一个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++;
    }
}