我试图获取字符串中的美元符号之间的值并将它们放在列表中。
例如,这是一个字符串:
var a ='Dear $name$, This is my number $number$. This is my address $address$ Thank you!'
我想得到的是,
var b = '$name$,$number$,$address$'
我是否必须关注字符串中的'$',因为$也用于jQuery?你有什么想法吗?
答案 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++;
}
}