Javascript正则表达式匹配重叠

时间:2019-07-06 07:44:32

标签: javascript regex

我要匹配字符串101100110..01

我使用此正则表达式/1[0]+(?=1)/g

let myStr = '10010001';
let re = /1[0]+(?=1)/g;
let arr = myStr.match(re);
console.log(arr); // [ '100', '1000' ]

如何修复我的正则表达式以得到这样的结果

[ '1001', '10001' ]

4 个答案:

答案 0 :(得分:2)

您无法使用一个正则表达式捕获重叠的匹配项,需要修改结果。

let myStr = '10010001';
let re = /1[0]+(?=1)/g;
let arr = myStr.match(re).map(match => match + '1');
console.log(arr); // [ '1001', '10001' ]

答案 1 :(得分:2)

在每次匹配后都有使用正则表达式对象递减的lastIndex属性的黑客,以实现您想要的目标

let myStr = '10010001';
let re = /1[0]+1/g;
let array1;
while ((array1 = re.exec(myStr)) !== null) {
  console.log(`Found ${array1[0]}`)
  re.lastIndex--;
}

请注意,如果您需要在1's之间进行匹配,则可以使用

1[^1]+1

答案 2 :(得分:1)

请参阅this question,您可以使用先行断言来解决您的问题。 演示:

public function actiongetFileSendIt(){
    if (function_exists('curl_file_create')) { 
    $cFile = curl_file_create($_FILES['file']['tmp_name'],$_FILES['file']['type'],'file');
    } else {
       $cFile = '@' . realpath($_FILES['file']['tmp_name'].';filename='.$_FILES['file']['name'].';type='.$_FILES['file']['type']);
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://0.0.0.0:8000/api/pos/import");
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $cFile);
    $result = curl_exec($ch);
    curl_close($ch);
    echo "<pre>";print_r($result);echo "</pre>";exit("Ends Here");
}

答案 3 :(得分:1)

您可以搜索模式并将最后一个聊天对象包装在正向查找内的一组中,然后将循环中的theis值添加到结果集中。

这种方法没有固定的后缀,或者不改变索引。

let myStr = '10010001',
    re = /10+(?=(1))/g,
    temp = [],
    result = [];

while ((temp = re.exec(myStr)) !== null) { // eg ['100', '1']
    result.push(temp.join(''));
}

console.log(result);