js正则匹配第一个问号后面的所有内容

如题,我想去掉第一个问号后面的所有内容,应该怎么写呢,能解释一下最好

阅读 16.8k
5 个回答
'aabbccdd?eeff?gghhkk'.replace(/^([^\?]*).*$/, function($all, $1){return $1});
// ^([^\?]*).*$
// ^ 从字符串开头匹配,$ 匹配到字符串结尾
// ([^\?]*) 匹配不包含 ? 的字符并捕获分组,对应后面函数里的 $1
// .? 匹配所有剩余部分
let str = 'abc?defg?hijk?';
console.log(str.replace(/\?.*/,'?')); //将匹配的第一个 ? 和后面部分替换成 ?
'aa?bbccdd?eeff?gghhkk'.match(/^[^?]*/)[0];

'aa?bbccdd?eeff?gghhkk'.split('?')[0];
粗暴版把第一个问号后面全部清除
'aabbccdd?eeff?gghhkk'.replace(/\?.*/,'?')
//输出aabbccdd?
//解读: 转义匹配?  .*是任意数量任意字符

温柔版只把第一个问号后面的清除 第二或第三以及更多的问号保留
'aabbccdd?eeff'.replace(/\?([^\?]*)\??/,'?')
//输出aabbccdd?

'aabbccdd?eeff?gghhkk'.replace(/\?([^\?]*)\??/,'?') 
//输出aabbccdd?gghhkk

//解读: 转义匹配? 中间是任意非问号的字符 后面转义匹配? 后面跟着的问号是表示有或无都可以
新手上路,请多包涵

'aabbccdd?eeff?gghhkk'.match(/.+?(?=?)/)[0]
我怎么觉得这样才是最佳方案~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题