如何为这句话创建正则表达式?

时间:2013-08-08 11:38:59

标签: regex

我有以下语句{$("#aprilfoolc").val("HoliWed27"); $("#UgadHieXampp").val("ugadicome");}。我想要使用combination.i编写以下正则表达式的字符串,但它不起作用。 请帮忙!

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

4 个答案:

答案 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+(?=")