javascript - JS RegEx 找不到表达式

标签 javascript regex

我需要找到引号内的 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/

相关文章:

javascript - PHP 是否比 Nginx/Apache 更快地检查文件是否存在?

javascript - 从 jquery 的 var 中删除一些文本

javascript - MongoDb - 重新加入分割的 MapReduce 任务

javascript - FancyBox Jquery Null 错误 - 奇怪的问题

javascript - 验证 10 位数字的字段 javascript

Javascript trim 多行字符串而不切割单词

regex - 如何对包含给定单词的句子向量进行子集化

javascript - onblur,仅在 jquery 和 javascript 中工作一次

javascript - 非法调用 addEventListener

r - 如何根据正则表达式在 dplyr 中分隔列