正则表达式使用可选的下一个字符或字符串结尾

时间:2015-11-16 19:25:29

标签: javascript regex wildcard

我有一个用正斜杠分隔的字符串,而通配符用$开头表示:

/a/string/with/$some/$wildcards

我需要一个正则表达式来获取所有通配符(没有" $"),其中通配符可以有更多" string"在它们之前(并且下一个字符应该始终是正斜杠)或者将在字符串的末尾。这就是我所处的位置(它匹配到字符串的结尾而不是下一个" /"):

//Just want to match $one
var string = "/a/string/with/$one/wildcard"
var re = /\$(.*)($|[/]?)/g
var m = re.exec(string)

console.log(m);
// [ '$one/wildcard',
//   'one/wildcard',
//   '',
//   index: 123,
//   input: '/a/string/with/$one/wildcard'
// ]

这是之前的尝试(不会考虑字符串末尾的通配符):

//Want to match $two and $wildcards
var string = "/a/string/with/$two/$wildcards"
var re = /\$(.*)\//g
var m = re.exec(string)

console.log(m);
// [ '$two/',
//   'two',
//   '',
//   index: 123,
//   input: '/a/string/with/$two/$wildcards'
// ]

我已经四处寻找匹配字符字符串的结尾并找到了几个答案,但没有一个尝试考虑多个匹配。我我需要能够将下一个字符与/ 贪婪匹配,而然后尝试匹配结束字符串。

所需的功能是获取输入字符串:

/a/string/with/$two/$wildcards

并将其转换为以下内容:

/a/string/with/[two]/[wildcards]

提前致谢!此外,如果已经明确详细说明了这一点,我很难道歉,我无法在各种搜索后找到副本。

2 个答案:

答案 0 :(得分:2)

我认为应该这样做:

/\$([^\/]+)/g

您可以使用replace()功能:

"/a/string/with/$two/$wildcards".replace(/\$([^\/]+)/g, "[$1]");
// "/a/string/with/[two]/[wildcards]"

答案 1 :(得分:0)

您可以对字符串使用replace函数,如下所示:

var s = '/a/string/with/$two/$wildcards';
s.replace(/\$([a-zA-Z]+)/g, '[$1]')';

s将具有以下值:

/a/string/with/[two]/[wildcards]

以下是替换文档https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/replace

的参考