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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何匹配以下字符串,但不包括JS中的单词字符与正则表达式?相关的知识,希望对你有一定的参考价值。

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

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://,协议斜杠之后的所有内容都将被删除。我尝试了这个answer中提到的替代背后的变化,但没有运气。

答案

你非常接近!您可以使用正则表达式捕获组获得您正在寻找的结果。

const stripPath = stripProtocol.replace(/(w)/(.*)/, '$1');

捕获组的正则表达式(用括号表示)记住它们匹配的内容。使用javascript替换,您可以插入这些匹配。

在你的例子中,'http://stackoverflow.com/question/ask'.replace(/(w)/(.*)/, '$1')匹配m/question/ask并用m替换它。

以上是关于如何匹配以下字符串,但不包括JS中的单词字符与正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:如何匹配不以前缀列表开头的子字符串

Ruby正则表达式过滤掉带有“字符串”后缀的单词结尾

Java正则表达式匹配字符串中的所有单词

如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?

需要 c# 正则表达式将逗号列表中的任何单词与另一个字符串中的任何单词匹配

正则匹配中 ^ $ 和  的区别