Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 - Fatal编程技术网

Javascript正则表达式选择字符串中的不同内容

Javascript正则表达式选择字符串中的不同内容,javascript,regex,Javascript,Regex,尝试构建正则表达式以检索/选择编码字符串中的元素,具体取决于某些键盘符号顺序: str = "(abc-1é,d[efg_2ç;i|jkl+3ö.(mno?4à,p[qr(st!5',uv#6^;|xyz%7_." // look strange :) 我需要检索包含的所有零件 1) 在(,->“abc-1é”+“mno?4á”+“st!5'” 2) 在[;->“efgèU 2ç”+“qr(st!5,uv#6^” 3) 在|.->“jkl+3ö”+“xyz%7” 我已经尝试了很多可能性,并且

尝试构建正则表达式以检索/选择编码字符串中的元素,具体取决于某些键盘符号顺序:

 str = "(abc-1é,d[efg_2ç;i|jkl+3ö.(mno?4à,p[qr(st!5',uv#6^;|xyz%7_." // look strange :)
我需要检索包含的所有零件

1) 在(,->“abc-1é”+“mno?4á”+“st!5'”

2) 在[;->“efgèU 2ç”+“qr(st!5,uv#6^”

3) 在|.->“jkl+3ö”+“xyz%7”

我已经尝试了很多可能性,并且我能够产生一些正确的结果:

/\(([^()]*),/g -> catch "(abc-1é," "(mno?4à," and "(st!5'," -> OK

/\|[\w()]{0,}(...)./g -> catch "|jkl+3ö."  and  "|xyz%7_." -> OK
不要问我为什么,但它是有效的,除了:

/\[([^()]*);/g  or /\[[\w()]{0,}(...);/g  -> catch "[efg_2ç;" but ignore "[qr(st!5',uv#6^;"
我的问题是:是否有可能创建一个唯一的正则表达式来捕获3个符号条件?类似于:

 / init: \[|\(|\| -> inside: [all founded signs, any length] -> end: ,|.|; /g

而且(如果可能的话)有一些解释…Thx提前

这个强大的单一正则表达式,能够同时匹配所有内容,由于竞争模式的干扰而不存在。可以使用3种模式代替,每种模式仅限于其特定的使用情况

然后,一种可能的方法是对每个模式使用
matchAll
,将每个结果数组转换/解构并收集到单个数组中,最后映射所有捕获。这种方法也更具可读性,更适合重构/维护

/(/(?:\(?[^,]*),)|(?:\[(?[^;]*)))|(?:\ |(?[^.]*))\)/gm);
常量regxparenthescomma=(/\([^,]*),/gm);
const regxBracketSemicolon=(/\[([^;]*);/gm);
const regxPipePeriod=(/\\\([^\.]*)\/gm);
函数提取字符序列(str){
返回[
…str.matchAll(regxparentesescomma),
…str.matchAll(regxBracketSemicolon),
…str.matchAll(regxPipePeriod)
].map(结果=>结果[1]);
}
const test=“(abc-1é,d[efg|u 2|i|jkl+3ö(mno?4á,p[qr(st!5',uv#6^;| xyz%7)。”;
console.log(
'提取字符序列(测试)=>',
提取字符序列(测试)
);

。作为控制台包装{min height:100%!important;top:0;}
OK,
[qr(st!5',uv#6^;
如果在正则表达式
[[\w(),!']{0,}(…)中声明了符号!',则效果良好
这个强大的单一正则表达式,能够一次匹配所有内容,但由于竞争模式的干扰而不存在。使用3个模式,每个模式仅限于其使用情况。将其与
matchAll
结果一起使用,这些结果被分解/展平到单个数组中,然后被缩减或映射。这也有助于可读性和重构好的。我要做的是为存储编码一种基于if->then->else叠瓦条件的契约,以供以后重用。例如
(a:b,a[c>d;| b[c>d;
一旦解码就会说
如果(投票数>10){批准(名字,决定)}否则{拒绝(名字,决定)}
每个参与者都能够安全地存储自己的条件。woooow@Peter:-)greaaaaaaaaaat@Wolden…wooow是什么意思?这种方法解决了问题吗?还有什么需要改进的吗?完美解决了,谢谢:-)[除了
str.matchAll
不被所有浏览器接受,但它在工作时按预期工作:-)]@Wolden…那么这是公认的方法,还是OP需要在尚未指定的环境中工作的解决方案?我已选中所有选项(已接受)(已解决)(已批准):-)