我要匹配字符串101
,1001
,10..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' ]
答案 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);