如何选中指定字符串并忽略空格?正则匹配含\b的文本技术问询
解决正则匹配目标文本的问题
嘿,我来帮你搞定这个正则匹配的问题!你想要忽略前后空格选中中间的Some words & things (lp4),但之前的正则写法有几个关键问题,我来一步步给你修正。
先说说你原来正则的问题
你写的/\s[\b*]\s/i完全没达到预期:
\b是单词边界元字符,不是可匹配的实际字符,而且放在[]字符类里时,它会被解析成退格符,这和你的需求完全不沾边。[\b*]这个字符类只能匹配退格符或者*号,根本没法选中你要的文本内容。- 这个正则也没有设置捕获组,就算匹配到内容也没法提取出目标文本。
正确的解决方案
方案1:用正则捕获去除前后空白的内容
这个正则能精准匹配前后任意数量的空白(包括空格、换行符等),并捕获中间的目标文本:
var string = ' \n Some words & things (lp4) '; var regexp = /^\s*(.*?)\s*$/; // 提取捕获组的内容(索引1是第一个捕获组) var selection = string.match(regexp)[1]; console.log(selection); // 输出:Some words & things (lp4)
解释一下正则各部分的作用:
^:匹配字符串开头\s*:匹配0个或多个空白字符(包括空格、换行、制表符等)(.*?):非贪婪模式捕获中间所有内容(避免过度匹配)\s*:匹配结尾的0个或多个空白字符$:匹配字符串结尾
方案2:更简单的字符串方法(如果不需要正则的话)
其实如果只是要去除前后空白,直接用JavaScript的trim()方法更高效:
var string = ' \n Some words & things (lp4) '; var selection = string.trim(); console.log(selection); // 输出:Some words & things (lp4)
补充:如果你的需求是匹配"两个空格之间"的内容
如果严格限定是两个单独空格之间的内容(不过你的原字符串开头是换行+空格,可能不是这种情况),可以用这个正则:
var regexp = /\s(.*?)\s/; var selection = string.match(regexp)[1];
但这个方法有局限性,如果前后是多个空格或换行,就没法完全匹配,所以还是方案1更通用。
内容的提问来源于stack exchange,提问作者Clone
相关产品推荐
相关产品推荐

