Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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正则表达式_Javascript_Regex_Regex Greedy - Fatal编程技术网

字符串分隔符之间的Javascript正则表达式

字符串分隔符之间的Javascript正则表达式,javascript,regex,regex-greedy,Javascript,Regex,Regex Greedy,我有以下字符串: %||1234567890||Joe||% some text winter is coming %||1234567890||Robert||% 问题:我正在尝试匹配%|| |…| |%之间的所有匹配项并处理这些子字符串匹配 我的正则表达式:/%([\s\s]*?)(?=%)/g 我的代码 var a = "%||1234567890||Joe||% some text winter is coming %||1234567890||Robert||%"; var pat

我有以下字符串:

%||1234567890||Joe||% some text winter is coming %||1234567890||Robert||%
问题:我正在尝试匹配%|| |…| |%之间的所有匹配项并处理这些子字符串匹配

我的正则表达式:
/%([\s\s]*?)(?=%)/g

我的代码

var a = "%||1234567890||Joe||% some text winter is coming %||1234567890||Robert||%";

var pattern = /%([\s\S]*?)(?=%)/g;

a.replace( pattern, function replacer(match){
    return match.doSomething();
} );
现在,模式似乎在选择第一次和最后一次出现的%||之间的所有内容||

我的

我需要的是:

我想对这些匹配进行迭代

%||1234567890 | |乔| |%

%||1234567890 | |罗伯特| |%


然后执行一些操作

您需要在
字符串中使用回调#replace
并修改模式以仅匹配
%|
|%
中的内容,如下所示:

var a=“%| | 1234567890 | | |乔| | |%winter即将来临%| | | 1234567890 |罗伯特|%”;
var模式=/%\\\\\\([\s\s]*?)\\\\\\\\\\%/g;
a=a.replace(模式、功能(匹配、组1){
var chunks=group1.split(“| |”);
返回“{1}”+chunks.join(“-”+“{/1}”;
} );

控制台日志(a),因为他尽量多拿东西,[\s\s]基本上是“任何东西”的意思。所以他什么都拿

RegExp parts without escaping, exploded for readability
start tag : %||
first info: ([^|]*) // will stop at the first |
separator : ||
last info : ([^|]*) // will stop at the first |
end tag   : ||%

Escaped RegExp:
/%\|\|([^\|]*)\|\|([^\|]*)\|\|%/g

尝试用
/%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。然后使用
a=a.replace(/pattern/g,函数($0,$1){return…;})
这个正则表达式不会匹配像
%| | | 123456 | 7890 | |乔| |%
这样的值,您不应该在值中使用定界字符。但从给出的示例来看,这不会发生。从给出的示例来看,分隔符是一个2字符的字符串。简直太棒了!谢谢Wiktor:)