我正在使用http://regexpal.com/,JavaScript中不支持部分前瞻和后瞻。
是否仍然可以使用匹配的标准来表示匹配的开始,而另一个则用于结束,而不包括在匹配中。
例如,如果我使用[tag]来获取标签,
或者如果我有{abc 1
,def
}来匹配 abc 1 和 def
当字符串很短时,很容易得到这个,但是我希望它能从一个更长的字符串中找到它,只有当这个组被{}包围并且个别项被`character
包围时答案 0 :(得分:0)
如果你没有JavaScript中的lookbehind,你可以使用非捕获组(或根本没有组)而不是(正)lookbehind。当然,这将成为整体匹配的一部分,因此您需要在捕获括号时将实际想要匹配的部分括起来,然后不仅评估整个匹配而只评估捕获组。
所以而不是
(?<=foo)bar
你可以使用
foo(bar)
在第一个版本中,匹配结果bar
将位于反引用$0
中。在第二个版本中$0
将等于foobar
,但$1
将包含bar
。
但是,如果匹配和下一场比赛的后视将重叠,这将失败。例如,如果要匹配字母包围的数字。
(?<=[a-z])[0-9](?=[a-z])
将匹配a1b2c3d
中的所有数字,但
[a-z]([0-9])[a-z]
仅匹配1
和3
。
答案 1 :(得分:0)
我想你总是可以使用分组:
m = "blah{abc 1, def}blah".match(/\{(.*?)\}/)
其中
m[0] = "{abc 1, def}"
m[1] = "abc 1, def"
该正则表达式页面未显示生成的子组(如果有)。