匹配以前缀开头的子字符串

Match substring that start with prefix

本文关键字:字符串 开头 前缀      更新时间:2023-09-26

我被一个小正则表达式卡住了我正在尝试使用正则表达式匹配以给定前缀开头的每个子字符串在javascript 中

prefix = "pre-"
regex = /???/
"pre-foo-bar bar pre-bar barfoo".replace(regex, '')
// should output "bar barfoo"

/'bpre-'S*'s?/g可以工作,假设您也想去掉尾部空间(根据您的示例(。如果要保留,请使用/'bpre-'S*/g

校正

'b只查找单词字符,而-绝对不是单词字符。不幸的是,JavaScript不支持自定义lookbehinds。

/('s|^)pre-'S*/g应该可以工作,但与上面给出的示例输出相比,将有一个领先的空间。这将检查"pre-"前面是否没有或有空格字符,后面是否有0个或多个非空格字符。它删除了除空格之外的整个块。如果空间对你来说真的很重要,你可以这样做:

str.replace(/('s|^)pre-'S*'s?/g, function(wholeString, optionalSpaceCharacter) {
    return optionalSpaceCharacter;
});

第二次校正

如果你连续有两个,比如"pre-a pre-b pre-c",我给你的复杂替换是行不通的。你最终会得到"pre-b ",因为最后是's?。要获得确切的所需输出,最好使用/('s|^)pre-'S*/g并检查原始字符串是否以"pre-"开头。如果是,只需从开头删除一个空格。

str.replace(/('s|^)pre-'S*/g, '').substring(str.substring(0, 4) == "pre-" ? 1 : 0);
var str =  'pre-foo-bar   f-pre-foo-bar  bar pre-pre pre-bar barfoopre- pre-a pre-b pre-c';  
str = str.replace(/(^|'s+)pre-'S*(?='s+|$)/g, '$1');
document.write('<pre>' + str + '</pre>');

http://jsfiddle.net/qTADZ/5/

我们寻找以空格开头或位于字符串(^|'s)开头的字符串,该字符串必须以pre-开头,并且我们获取所有后面跟着一个或多个空格的非空格字符或字符串'S*(?='s+|$)的末尾。我们删除了除了字符串$1(引用(^|'s)(的初始空格/开头之外的所有内容

使用此

var string = 'pre-foo-bar bar pre-bar barfoo';  
string.replace(/pre-['w'S]+/ig,'');