Javascript 正则表达式匹配某个单词,并清除所有前导和尾随空格

Javascript 正则表达式匹配某个单词,并清除所有前导和尾随空格,javascript,regex,Javascript,Regex,所以我需要用两种方法修剪某个字符串(不同的结果) myString='3楼帝国大厦',请注意myString的格式可以是: 13楼哈利法塔 克莱斯勒大厦二楼 四楼大本钟 基本上我想说的是地板这个词是一致的 所以我需要做的是: 匹配字符串直到某个单词,并删除该单词之后的所有内容 所以从myString开始,我只需要一个单词'3rd'-到目前为止我得到的是:myString.match(/.+?(?=floor)/ig),但是这个代码去掉了一个空格,变成了'3rd' 匹配一个字符串直到某个单词,

所以我需要用两种方法修剪某个字符串(不同的结果)

myString='3楼帝国大厦',请注意myString的格式可以是:

  • 13楼哈利法塔
  • 克莱斯勒大厦二楼
  • 四楼大本钟
基本上我想说的是地板这个词是一致的

所以我需要做的是:

  • 匹配字符串直到某个单词,并删除该单词之后的所有内容
  • 所以从myString开始,我只需要一个单词'3rd'-到目前为止我得到的是:
    myString.match(/.+?(?=floor)/ig)
    ,但是这个代码去掉了一个空格,变成了'3rd'

  • 匹配一个字符串直到某个单词,并向后删除该单词中的所有内容
  • 因此,从myString开始,我只需要“帝国大厦”这个词

    编辑:我还需要记住这些假设,有可能吗?如何使其简洁?(如有可能,一个班轮):

    • 接受楼层或flr
    • 仅取楼层/flr前的第一个字(例如,如果输出为公寓二楼或公寓二楼建筑,则应仅取二楼和建筑/bldg)
      • 带正则表达式:

        const re=/([\s\s]*?)(?:\s+)楼层(?:\s+)([\w+\.\,\?\!]*)/gim
        const str=`帝国大厦3楼
        13楼哈利法塔
        克莱斯勒大厦二楼
        四楼大本钟
        三楼技术大楼`
        match=re.exec(str);
        while(匹配!=null){
        //匹配文本:匹配[0]
        //匹配开始:match.index
        //捕获组n:匹配[n]
        日志(匹配[1],“-”,匹配[2])
        match=re.exec(str);
        
        }
        或者,您可以使用字符串

        const myString='3楼帝国大厦';
        const certainString='Floor';
        let before=myString.split(certainString)[0];
        let after=myString.split(certainString)[1];
        console.log(之前);
        
        console.log(之后)在第一个示例中,您没有在“向前看”中包含楼板前的空间

        您的更新模式将是
        +?(?=地板)
        请参阅


        如果要匹配这两个部分,可以使用两个捕获组,并从匹配非空白字符开始,以防止出现空字符串

        使用
        /i
        进行不区分大小写的匹配,如果需要,使用if
        /g
        获取所有匹配

        /(\S.*?) floor (\S.*)/gi
        
        图案会匹配的

        • (\S.*)
          捕获组1,匹配非空白字符或任何非贪婪字符
        • 楼层
          匹配被空间包围的楼层
        • (\S.*)
          捕获组2,将空格字符与行的其余部分匹配`

        const regex=/(\S.*)层(\S.*)/gi;
        const str=`13楼哈利法塔
        克莱斯勒大厦二楼
        四楼大本钟
        帝国大厦三楼
        楼层`;
        让m;
        while((m=regex.exec(str))!==null){
        //这是避免具有零宽度匹配的无限循环所必需的
        if(m.index==regex.lastIndex){
        regex.lastIndex++;
        }
        console.log(m[1]);
        console.log(m[2]);
        控制台日志(“\n”);
        
        }
        您尝试过什么?什么不起作用?从我的第一个结果开始,我尝试了这个:myString.match(/.+?(?=floor)/ig),但它省略了这样一个空格:“3rd”而不是“3rd”,对于第二个结果,我还没有看到任何东西。看到了吗?什么意思?您必须能够在不首先看到的情况下尝试某些内容?对于第一个,您可以添加匹配的空间
        +(?=地板)
        ,对于第二个,您可以匹配第一个部分,并将其替换为空字符串
        +?地板
        myString.match(/([\s\s]*?)\s*floor\s*([\s\s]*)/i)。切片(1)
        floor,floor,fLoor@mplungjan是的,我会考虑的,但他说了“确定的词”。某个单词表示某个大写字母和小写字母。我们不想过度设计,我也不区分大小写,我的建议也是这样的:“代码>某些单词='Floor'
        ,字符串为
        三楼floortech大厦
        ;这在澳大利亚是一个真正的建筑名称;我的第一个例子处理这个问题