Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 两个字符串之间的Regex catch字符串,多行_Javascript_Regex - Fatal编程技术网

Javascript 两个字符串之间的Regex catch字符串,多行

Javascript 两个字符串之间的Regex catch字符串,多行,javascript,regex,Javascript,Regex,我正在处理一个*.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 spec

我正在处理一个*.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);
谢谢你的帮助,我对正则表达式不是很在行:(

试试这个模式:

/msgid (["']{2})\n([\s\S]*?)\nmsgstr \1/
结果是在第二个捕获组中,但您可以使用以下方法使其更简单:

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

在第一个捕获组中,这里有一种提取所有文本的方法:

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

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

请注意,regex没有提到单引号,但是如果您需要能够在
msgid'
msgstr'
之间进行匹配,您可以使用以下选项:

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

你可以试试这个正则表达式

msgid ""((?:.|[\n\r])+)msgstr ""
(((?:.|[\n\r])+)
这是您的捕获组

(?:.|[\n\r])+
这允许多次匹配
[\n\r]
\n\r
用于换行符和回车符


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

下面是一个现成的函数:

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

s
标志在Javascript中不存在。我的两天搜索到此结束。