Javascript 如何用正则表达式匹配JS中的字符串,但不包括单词字符?

Javascript 如何用正则表达式匹配JS中的字符串,但不包括单词字符?,javascript,regex,string,Javascript,Regex,String,我正在对url字符串执行域验证和输入屏蔽,并尝试使用正则表达式替换从url中删除协议和路径。目前,我正在按顺序使用两个replace函数:一个用来替换协议,另一个用来删除第一个/及其后的所有内容 const stripProtocol = val.replace(/(^\w+:|^)\/\//, ''); const stripPath = stripProtocol.replace(/\w\/(.*)/, ''); // http://stackoverflow.com ==> sta

我正在对url字符串执行域验证和输入屏蔽,并尝试使用正则表达式替换从url中删除协议和路径。目前,我正在按顺序使用两个replace函数:一个用来替换协议,另一个用来删除第一个
/
及其后的所有内容

const stripProtocol = val.replace(/(^\w+:|^)\/\//, '');
const stripPath = stripProtocol.replace(/\w\/(.*)/, '');

// http://stackoverflow.com ==> stackoverflow.com
// http://stackoverflow.com/question/ask ==> stackoverflow.co

第一个正则表达式工作得很好,但我遇到了两个问题。首先,分配给
stripPath
变量的匹配正则表达式也删除了第一个斜杠前面的/w字符。其次,这个验证是针对输入字段掩码的,这意味着每次击键时都会执行它,然后用精简的值替换用户的输入。因此,我不能简单地匹配第二个正则表达式中第一次出现的
/
,因为当用户开始键入以协议开头的url时,例如
http://
,协议斜杠之后的所有内容都将被删除。我尝试了本文中提到的look behind备选方案的一个变体,但没有成功。

你已经非常接近了!通过使用正则表达式捕获组,您可以获得所需的结果

const stripPath = stripProtocol.replace(/(\w)\/(.*)/, '$1');
捕获组的正则表达式(用括号表示)记住它们匹配的内容。使用Javascript的replace,可以插入这些匹配项


在您的示例中,
'http://stackoverflow.com/question/ask“.replace(/(\w)\/(.*)/,“$1”)
匹配
m/question/ask
并将其替换为
m

你好,John,请尝试一下:var re=/(\w+.com)/g;var-str='';var myArray=str.match(re);log(myArray[0]);基本上,这将始终得到域和TLD.Ravi-它需要为任何潜在的顶级域工作,所以仅仅检查.com是不够的。我需要匹配任何不是
/
的字符,而不是当前匹配的
.com
,请改用re=/(\w+\.[a-z]{3})/g。这样,您就可以在任何TLD上进行匹配。有很多TLD不是三个字符。正如我前面所说,它需要匹配任何不是
或不是
/
的内容。没有具体的字符计数等。谢谢你,这正是我要找的。作为一个旁注:如果你的URL总是可以成为一个有效的URL,你应该使用,而不是正则表达式。同意使用URL接口…浏览器真正理解URL,所有属性都很容易访问。我认为浏览器必须为此提供api,但是我很快就认为我只能在
window.location
中这样做,结果是,如果您没有在URL字符串中提供协议或子域,URL构造函数就会抛出一个错误,这些都是我需要支持的输入。坚持使用正则表达式解决方案。。。