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