在一个单词后面匹配所有的内容

5
我正在尝试从data-url中提取base64字符串。该字符串类似于此样式,因此我正在尝试提取单词“base64”之后的所有内容。
test = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQAB'

所以我想从上面的字符串中提取以下内容。
,/9j/4AAQSkZJRgABAQAAAQAB

以下是我的正则表达式

const base64rgx = new RegExp('(?<=base64)(?s)(.*$)');
console.log(test.match(base64rgx))

但是这样做会出现错误:
 VM3616:1 Uncaught SyntaxError: Invalid regular expression: /(?<=base64)(?s)(.*$)/: Invalid group
3个回答

6

var test = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQAB';

var regex = /(?<=base64).+/;

var r = test.match(regex);

console.log(r);

这是正则表达式:https://regex101.com/r/uzyu0a/1

我很高兴能够帮助。 - Marcelo
帮助我解决了我的问题。谢谢Alex。 - NotAgain
在Safari中会出现错误。 - suncat100

4

看起来不支持向后查找。但好消息是,你不需要在这里使用lookaround,以下模式应该可以工作:

test = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQAB'
var regex = /.*?base64(.*?)/g;
var match = regex.exec(test);
console.log(match[1]);

我不确定您想捕获base64后的字符串有多长。例如,如果您不想要逗号或9j部分,则可以轻松修改模式来处理。


当我运行这个程序几次后,我会交替得到null和结果。你知道这可能是exec的原因吗? - Rookie
@Rookie 你需要告诉我你正在处理哪些数据?它是否超过一行数据?对于单个base64字符串,我认为我的答案应该可以很好地工作。 - Tim Biegeleisen
这是一个data-url,因此数据是多行的。我发布了裁剪版本的base64字符串以说明问题。 - Rookie
@新手 尝试使用惰性点 .* - Tim Biegeleisen
对我来说,被接受的答案给出了给定单词之前的所有单词以及该单词本身。这个答案是正确的。 - ABDULLOKH MUKHAMMADJONOV

0
你可能不需要正则表达式:只需使用 indexOf 查找 base64 字符串,然后使用 substr

var test = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQAB';

var data = test.substr(test.indexOf('base64')+6); // 6 is length of "base64" string

console.log(data);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接