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

How would I write a regex that matches the values following a string (to the next comma)

我有一个键=值对的 csv。如何编写一个仅匹配值“1234$32@a”(或键 "password" 之后的任何值)的正则表达式而不使用后视?

system=blah, user=stevedave, password=1234@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@a,
(?:password=)(.+,)           not sure I understand backreference correctly

看来我的系统不支持回顾(而且它们太贵了),所以这不是一个选择。还有别的办法吗?

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

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

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

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

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

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

Please see Regex 101 demo here.

Javascript 中的一个常见模式是

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

例如:

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

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

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