我如何编写一个与字符串后面的值匹配的正则表达式(到下一个逗号)

时间:2015-02-16 21:36:22

标签: javascript regex csv key-value

我有一个key = value对的csv。如何在不使用lookbehind的情况下编写仅匹配值“1234 $ 32 @ a”(或密钥“password”之后的任何值)的正则表达式?

system=blah, user=stevedave, password=1234$32@a, mylocation=amsterdam

我尝试了以下内容:

[\n\r].*password=\s*([^\n\r]*) didn't match anything (from another SO thread)
\bpassword=\s+(.*)$            just plain ol' wrong.
\bpassword=.+\b,               matches the whole string password=1234$32@a,
(?:password=)(.+,)\2           not sure I understand backreference correctly

看来我的系统不支持lookbehinds(而且它们太昂贵了),所以这不是一个选择。还有另一种方式吗?

3 个答案:

答案 0 :(得分:3)

匹配空格以外的任何内容或,后的password=

var kv = 'system=blah, user=stevedave, password=1234$32@a, mylocation=amsterdam',
    re = /password=([^\s,]+)/,
    match = re.exec(kv);
alert(match[1]);

演示:https://regex101.com/r/bE4bZ1/1

严格来说,如果你想要下一个逗号的任何内容,可以是[^,]

答案 1 :(得分:1)

这应该可以解决问题(我不知道你可能允许哪些特殊字符,所以我只指定了你的例子中的那些):

(?:password\s*=\s*)([A-Za-z0-9@$]+)

Please see Regex 101 demo here.

答案 2 :(得分:1)

Javascript中常见的模式,其臭名昭着的缺乏外观是

.replace(/.*(stuff you're interested in).*/, "$1")

例如:

str = "system=blah, user=stevedave, password=1234$32@a, mylocation=amsterdam"

pwd = str.replace(/.+?password=(.+?),.+/, "$1")
document.write(pwd)

.exec.match后跟[1]是脆弱的,因为如果没有匹配则会失败。 .replace只返回原始字符串。