我需要找到引号内的 MyValueA 和引号内的 MyValueB。我的问题是顺序有时会改变,而且我的正则表达式找不到任何东西。
那里的人怎么知道正则表达式来找到我的值? 也可以为 MyValueA 和 MyValueB 运行两个正则表达式。
变体 A
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({
StuffValue : 'Foo Blaaaa',
MyValueA : './selector.template.abc',
MyValueB : ['./selector.styleA.gpp', './selector.styleB.gpp']
}) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
变体 B
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({
StuffValue : 'Foo Blaaaa',
MyValueA
: './selector.template.abc',
MyValueB : ['./selector.styleA.gpp',
'./selector.styleB.gpp']
}) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
变体 C
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({
StuffValue : 'Foo Blaaaa', MyValueA : './selector.template.abc', MyValueB : ['./selector.styleA.gpp', './selector.styleB.gpp']
}) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
感谢任何想法:)
最佳答案
我建议不要使用正则表达式来解析像这样的复杂数据结构——它充满了陷阱,比如转义字符。如果你真的想这样做,这个片段通过使用\s* 代表空白并对内容进行“惰性”匹配以避免一次抓取太多 - (.*?)。
const plaintext1 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({
StuffValue : 'Foo Blaaaa',
MyValueA : './selector.template.abc',
MyValueB : ['./selector.styleA.gpp', './selector.styleB.gpp']
}) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt`;
const plaintext2 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({
StuffValue : 'Foo Blaaaa',
MyValueA
: './selector.template.abc',
MyValueB : ['./selector.styleA.gpp',
'./selector.styleB.gpp']
}) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt`;
const plaintext3 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({
StuffValue : 'Foo Blaaaa', MyValueA : './selector.template.abc', MyValueB : ['./selector.styleA.gpp', './selector.styleB.gpp']
}) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt`;
const regexA = /MyValueA\s*:\s*'(.*?)'/;
const regexB = /MyValueB\s*:\s*\[\s*'(.*?)'\s*,\s*'(.*?)'\s*\]/;
console.log( regexA.exec( plaintext1 )[1] );
console.log( regexA.exec( plaintext2 )[1] );
console.log( regexA.exec( plaintext3 )[1] );
console.log( regexB.exec( plaintext1 )[1] );
console.log( regexB.exec( plaintext1 )[2] );
console.log( regexB.exec( plaintext2 )[1] );
console.log( regexB.exec( plaintext2 )[2] );
console.log( regexB.exec( plaintext3 )[1] );
console.log( regexB.exec( plaintext3 )[2] );
您可以通过首先使用 strippedPlaintext1 = plaintext1.replace(/\s/g, ""); 从文本中去除空格来简化正则表达式。但这可能会去掉你想要的空间。
一个更好的方法是以某种方式从文本中过滤掉数据,然后使用像 JSON.parse() 这样的东西来编码成一个 javascript 对象。
关于javascript - JS RegEx 找不到表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45971714/