我有一个特殊的任务,需要大量的regex和javascript parsing。
我的头快爆炸了,所以也许我累了,忘记了一些小事情--我不是新手--所以也许有人会给我指点方向,告诉我我犯了什么错。
所以我有一个正则表达式代码:
((?<=\ffmpg=).+(?=/u0026cs=nt))
若要获取两个字符串之间的子字符串的值,请执行以下操作。第一个字符串名为:ffmpg=,从这个字符串开始,它应该启动,它将在另一个字符串启动之前结束,名为//u0026cs=nt。
问题是它工作正常,直到html页面只包含一个同名的参数;因为源html包含在类似于10的ffmg和名为cs=nt的尾字符串中。
我甚至不能用regex来计数字符,因为每次访问html页面时,字符的数量都是不同的,有时还会+3 +10。因此,唯一的方法是从param1的开始到param2的末尾得到这个刺。
这是我需要得到的字符串:1714248%2C23851735%2C23804281%2C23839597%2C23357901%2C3313341%2C3316343%2C23848795%2C3300132%2C26853996%2C3300114%2C3315790%2C23857451%2C23856472%2C23851936%2C3300161%2C3314786%2C23856652%2C23859863%2C23837993%2C23833479%2C23861502%2C23842630%2C23842986%2C23861012
这是源html示例:
\u0026doc=IcuU5Oy8\u0026pen=V9PXaHoOp1gKD25rgAg\u0026ffmpg=1714248%2C23851735%2C23804281%2C23839597%2C23357901%2C3313341%2C3316343%2C23848795%2C3300132%2C26853996%2C3300114%2C3315790%2C23857451%2C23856472%2C23851936%2C3300161%2C3314786%2C23856652%2C23859863%2C23837993%2C23833479%2C23861502%2C23842630%2C23842986%2C23861012\u0026cs=nt\u0026token=gHgig8eLY3qsQ0bXa\u0026doc=IcuU5Oy8\u0026pen=V9PXaHoOp1gKD25rgAg\u0026ffmpg=1714248%2C23851735%2C23804281%2C23839597%2C23357901%2C3313341%2C3316343%2C23848795%2C3300132%2C26853996%2C3300114%2C3315790%2C23857451%2C23856472%2C23851936%2C3300161%2C3314786%2C23856652%2C23859863%2C23837993%2C23833479%2C23861502%2C23842630%2C23842986%2C23861012\u0026cs=nt\u0026token=gHgig8eLY3qsQ0bXa\u0026doc=IcuU5Oy8\u0026pen=V9PXaHoOp1gKD25rgAg\u0026ffmpg=1714248%2C23851735%2C23804281%2C23839597%2C23357901%2C3313341%2C3316343%2C23848795%2C3300132%2C26853996%2C3300114%2C3315790%2C23857451%2C23856472%2C23851936%2C3300161%2C3314786%2C23856652%2C23859863%2C23837993%2C23833479%2C23861502%2C23842630%2C23842986%2C23861012\u0026cs=nt\u0026token=gHgig8eLY3qsQ0bXa\
我复制了3倍相同的只是为了这个目的,因为它是非常大的html来源,我怀疑我可以上传到这里。
谢谢你的帮助。
发布于 2019-12-07 14:30:00
在您的问题中,您使用(?<=\ffmpg=),其中\f将匹配数据示例中不存在的表单提要字符。如果您打算使用\\f,它将匹配示例数据中也不存在的\f。
您可以使用捕获组来获得匹配,而不是使用查找器,因为不是所有浏览器都广泛支持查找。
如果您只想得到一个匹配,可以省略/g全局标志。
如果使用.+,就会匹配太多,因为.+将匹配到字符串的末尾,然后返回到第一次匹配\\u0026cs=nt为止。
相反,您可以做的是特定于您将允许匹配的字符类,当前字符串的哪一个字符类具有以下字符[AC0-9%]+
例如,可以将字符类的范围扩展为与chars A-Z (而不是AC )匹配,并根据需要添加更多字符或范围。
ffmpg=([AC0-9%]+)\\\\u0026cs=nt例如
const regex = /ffmpg=([AC0-9%]+)\\\\u0026cs=nt/;
const str = `\\\\u0026doc=IcuU5Oy8\\\\u0026pen=V9PXaHoOp1gKD25rgAg\\\\u0026ffmpg=1714248%2C23851735%2C23804281%2C23839597%2C23357901%2C3313341%2C3316343%2C23848795%2C3300132%2C26853996%2C3300114%2C3315790%2C23857451%2C23856472%2C23851936%2C3300161%2C3314786%2C23856652%2C23859863%2C23837993%2C23833479%2C23861502%2C23842630%2C23842986%2C23861012\\\\u0026cs=nt\\\\u0026token=gHgig8eLY3qsQ0bXa\\\\\\\\u0026doc=IcuU5Oy8\\\\u0026pen=V9PXaHoOp1gKD25rgAg\\\\u0026ffmpg=1714248%2C23851735%2C23804281%2C23839597%2C23357901%2C3313341%2C3316343%2C23848795%2C3300132%2C26853996%2C3300114%2C3315790%2C23857451%2C23856472%2C23851936%2C3300161%2C3314786%2C23856652%2C23859863%2C23837993%2C23833479%2C23861502%2C23842630%2C23842986%2C23861012\\\\u0026cs=nt\\\\u0026token=gHgig8eLY3qsQ0bXa\\\\\\\\u0026doc=IcuU5Oy8\\\\u0026pen=V9PXaHoOp1gKD25rgAg\\\\u0026ffmpg=1714248%2C23851735%2C23804281%2C23839597%2C23357901%2C3313341%2C3316343%2C23848795%2C3300132%2C26853996%2C3300114%2C3315790%2C23857451%2C23856472%2C23851936%2C3300161%2C3314786%2C23856652%2C23859863%2C23837993%2C23833479%2C23861502%2C23842630%2C23842986%2C23861012\\\\u0026cs=nt\\\\u0026token=gHgig8eLY3qsQ0bXa\\\\`;
console.log(str.match(regex)[1]);
发布于 2019-12-07 13:34:43
试试这个:
(?<=ffmpg=)([A-F0-9%]+)解释
由于您的字符串仅由url编码的字符组成,所以可以使用[A-F0-9%]+字符类来捕获它。它将在下一个字符串开始时停止,因为会有一个反斜杠。
请参阅在线演示这里。
https://stackoverflow.com/questions/59226098
复制相似问题