3

我正在处理一个 *.po 文件,我正在尝试捕获 and 之间的所有文本msgid ""msgstr ""并不是很幸运,永远不会超过一行:

msgid ""
"%s asdfgh asdsfgf asdfg %s even if you "
"asdfgdh sentences with no sense. We are not asking  translate "
"Shakespeare's %s Hamlet %s !. %s testing regex %s "
"don't require specific industry knowledge. enjoying "
msgstr ""

我试过的:

var myArray = fileContent.match(/msgid ([""'])(?:(?=(\\?))\2.)*?\1/g);

感谢您的帮助,我不太擅长正则表达式 :(

4

4 回答 4

8

这是提取所有文本的一种方法:

var match = text.replace(/msgid ""([\s\S]*?)msgstr ""/, "$1");

示例:http: //jsfiddle.net/bqk79/

[\s\S]一个字符类,它将匹配任何字符,包括换行符,因此[\s\S]*?将匹配任意数量的任意字符。在其他语言中,您可以使用sorDOTALL标志来进行.匹配换行符,但 Javascript 不支持这一点。

请注意,您的正则表达式没有提及单引号,但如果您需要能够在msgid ''and之间进行匹配,msgstr ''您可以使用以下内容:

var match = text.replace(/msgid (['"]{2})([\s\S]*?)msgstr \1/, "$2");
于 2013-05-31T16:32:05.630 回答
2

试试这个模式:

/msgid (["']{2})\n([\s\S]*?)\nmsgstr \1/

结果在第二个捕获组中,但您可以使用以下方法更简单:

/msgid ["']{2}\n([\s\S]*?)\nmsgstr /

在第一个捕获组中

于 2013-05-31T16:26:06.230 回答
2

我意识到这个问题专门要求使用正则表达式,但如果可以的话,您应该考虑使用字符串拆分。

这是一个现成的功能:

function extractTextBetween(subject, start, end) {
    try{
        return subject.split(start)[1].split(end)[0];
    } catch(e){
        console.log("Exception when extracting text", e);
    }
}

http://jsfiddle.net/b33hdh9b/3/

于 2015-10-02T16:26:39.863 回答
1

你也许可以试试这个正则表达式?

msgid ""((?:.|[\n\r])+)msgstr ""

((?:.|[\n\r])+)这是你的捕捉组;

(?:.|[\n\r])+这可以匹配.[\n\r]多次匹配\n\r换行符和回车符。

经过测试

于 2013-05-31T16:32:20.893 回答