0

我有以下语句{$("#aprilfoolc").val("HoliWed27"); $("#UgadHieXampp").val("ugadicome");}。我想用组合获取字符串。我写了以下正则表达式,但它不起作用。请帮忙!

(?=[\$("#]?)[\w]*(?<=[")]?)
4

4 回答 4

2

您的环视断言错误地使用了字符类,并且您混淆了lookbehind 和lookahead。尝试以下操作:

(?<=\$\(")\w*(?="\))
于 2013-08-08T11:42:51.933 回答
1

你可以使用这个更简单的:

'{$("#aprilfoolc").val("HoliWed27");}'.match(/\$\(\"#(\w+)\"[^"]*"(\w+)"/)

这返回

["$("#aprilfoolc").val("HoliWed27"", "aprilfoolc", "HoliWed27"]

您想要的字符串位于索引 1 和 2 处。

于 2013-08-08T11:43:22.593 回答
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));
于 2013-08-08T11:51:57.440 回答
1

这种建设

(?=[\$*"#]?)

将匹配一个前瞻,但只是可选的——字符集后跟一个?. 这种打败下一部分,

[\w]

仅匹配单词字符。所以前瞻永远不会匹配。类似的,这部分

(?<=[")])

也永远不会匹配,因为从逻辑上讲,永远不会有一个字符")字符串的末尾\w只匹配。同样,由于这部分是可选?的(最后又是),所以它永远不会匹配。

有点不清楚你在追求什么。双引号内的字符串,是的,但在第一个你想跳过散列 - 为什么?鉴于您的输入和所需的输出,这应该可以工作:

\w+(?=")
于 2013-08-08T11:53:32.777 回答