我需要这个字符串:
var x = 'Hi ${name}! How are you? ${name}, you are old! ${name} share with ${other} how do u ${feel}!'
我需要知道使用正则表达式存在多少不同的$ {ANY_THING}。在上面的示例中,我预计3:$ {name},$ {other},$ {feel}
我正在尝试:
x.match(\${([a-zA-Z]))
但输出错误:(
谢谢!
答案 0 :(得分:5)
我需要知道使用正则表达式存在多少不同的$ {ANY_THING}
x.match(/\$\{[^\}]+\}/g)
.sort()
.filter(function(element, index, array) {
return index == array.indexOf(element);
}) // this .filter() filters out the duplicates (since JS lacks of built in
// unique filtering functions
.length;
上面的代码会返回3
,因为x
字符串中有多少个不同的项目。
JSFiddle:http://jsfiddle.net/cae6P/
PS:仅使用正则表达式是不可能的。您需要使用.filter()
解决方案或其他类似的
答案 1 :(得分:1)
我通过 farn 用户在#regex IRC频道找到此解决方案:
x.match(/\$\{([^\}]+)\}(?![\S\s]*\$\{\1\})/g);
输出:
['${name}',
'${other}',
'${feel}']
和
x.match(/\$\{([^\}]+)\}(?![\S\s]*\$\{\1\})/g).length;
输出:
3
:)
答案 2 :(得分:0)
要匹配您想要的语法,您需要:
x.match(/\$\{([a-zA-Z]+)\}/)