我有以下语句{$("#aprilfoolc").val("HoliWed27"); $("#UgadHieXampp").val("ugadicome");}
。我想要使用combination.i编写以下正则表达式的字符串,但它不起作用。
请帮忙!
(?=[\$("#]?)[\w]*(?<=[")]?)
答案 0 :(得分:2)
您的lookaround assertions错误地使用了character classes,而且您已经混淆了后视和前瞻。请尝试以下方法:
(?<=\$\(")\w*(?="\))
答案 1 :(得分:1)
你可以使用这个更简单的一个:
'{$("#aprilfoolc").val("HoliWed27");}'.match(/\$\(\"#(\w+)\"[^"]*"(\w+)"/)
返回
["$("#aprilfoolc").val("HoliWed27"", "aprilfoolc", "HoliWed27"]
你想要的字符串在索引1和2处。
答案 2 :(得分:1)
也可能:
/\("[#]?(.*?)"\)/
import re
s='{$("#aprilfoolc").val("HoliWed27");}'
f = re.findall(r'\("[#]?(.*?)"\)',s)
for m in f:
print m
我不知道为什么,但如果你想同时捕获两个组,那么:
/\("#(.*?)"\).*?\("(.*?)"\)/
import re
s='{$("#aprilfoolc").val("HoliWed27");}'
f = re.findall(r'\("#(.*?)"\).*?\("(.*?)"\)',s)
for m in f:
print m[0],m[1]
在JavaScript中:
var s='{$("#aprilfoolc").val("HoliWed27")';
var re=/\("#(.*?)"\).*?\("(.*?)"\)/;
alert(s.match(re));
答案 3 :(得分:1)
这种结构
(?=[\$*"#]?)
将匹配 lookahead ,但只是可选的 - 字符集后跟?
。这种方式打败了下一部分,
[\w]
仅匹配单词字符。因此,前瞻永远不会匹配。类似,这部分
(?<=[")])
也永远不会匹配,因为从逻辑上讲,只有匹配"
的字符串末尾的字符)
或\w
之一永远不会存在。同样,由于这部分是可选的(最后再次?
),它将永远不会匹配。
有点不清楚你在追求什么。双引号内的字符串,是的,但是在第一个中你要跳过哈希 - 为什么?鉴于您的输入和所需的输出,这应该工作:
\w+(?=")