【问题标题】:How to get specific text from a string in regex如何从正则表达式中的字符串中获取特定文本
【发布时间】:2021-12-29 12:48:51
【问题描述】:
我有一个字符串,我需要从中提取特定文本
let str = 'id = "Test This is" id ="second" abc 123 id ="third-123"';
let res = str.match(/[^id ="\[](.*)[^\]]/g);
console.log(res);
我只想要 ids 中的文本 ['Test This is','second','third-123']
但我收到[ 'Test This is" id ="second" abc 123 id ="third-123"' ]
我不想要的第一个 id 之后的整个文本。我需要有关模式的帮助。
【问题讨论】:
标签:
javascript
regex
string
match
【解决方案1】:
您的模式使用否定字符类,您排除匹配列出的单个字符,并排除匹配的 [ 和 ] 示例数据中不存在。
这样,您将字符串中的第一个字符 T 与 [^id ="\[] 匹配,并将字符串中的最后一个字符 ; 与 [^\]] 和 .* 匹配捕获介于两者之间的所有内容。
我建议使用否定字符类来排除匹配 " 的情况:;
\bid\s*=\s*"([^"]*)"
Regex demo
let str = 'id = "Test This is" id ="second" abc 123 id ="third-123"';
let res = str.matchAll(/\bid\s*=\s*"([^"]*)"/g);
console.log(Array.from(str.matchAll(/\bid\s*=\s*"([^"]*)"/g), m => m[1]));
【解决方案2】:
您可以将其简化为一个非贪婪的正则表达式,与引号在字符串中的位置无关:
let str = 'id = "Test This is" id ="second" abc 123 id ="third-123"';
let res = str.match(/".*?"/g);
console.log(res);