我有一个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(而且它们太昂贵了),所以这不是一个选择。还有另一种方式吗?
答案 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@$]+)
答案 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
只返回原始字符串。