我在处理一个* .po文件,我试图抓住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);
感谢您的帮助,我对正则表达式不太满意:(
答案 0 :(得分:7)
以下是提取所有文字的一种方法:
var match = text.replace(/msgid ""([\s\S]*?)msgstr ""/, "$1");
[\s\S]
是一个字符类,它将匹配任何字符,包括换行符,因此[\s\S]*?
将匹配任意数字的任何字符。在其他语言中,您可以使用s
或DOTALL
标记来使.
匹配换行符,但Javascript不支持此功能。
请注意,正则表达式并未提及单引号,但如果您需要能够在msgid ''
和msgstr ''
之间进行匹配,则可以使用以下内容:
var match = text.replace(/msgid (['"]{2})([\s\S]*?)msgstr \1/, "$2");
答案 1 :(得分:2)
尝试使用此模式:
/msgid (["']{2})\n([\s\S]*?)\nmsgstr \1/
结果是在第二个捕获组中,但您可以使用以下内容更简单:
/msgid ["']{2}\n([\s\S]*?)\nmsgstr /
在第一个捕获组
答案 2 :(得分:2)
我意识到这个问题特别要求使用正则表达式,但如果可以的话,你应该考虑使用字符串拆分。
这是一个现成的功能:
function extractTextBetween(subject, start, end) {
try{
return subject.split(start)[1].split(end)[0];
} catch(e){
console.log("Exception when extracting text", e);
}
}
答案 3 :(得分:1)
你可以试试这个正则表达式吗?
msgid ""((?:.|[\n\r])+)msgstr ""
((?:.|[\n\r])+)
这是你的追捕小组;
(?:.|[\n\r])+
这样可以多次匹配.
或[\n\r]
,\n\r
可用于换行和回车。