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需要在尚未指定的环境中工作的解决方案?我已选中所有选项(已接受)(已解决)(已批准):-)