匹配以prefix开头的子字符串

时间:2011-10-16 16:36:26

标签: javascript regex

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

prefix = "pre-"
regex = /???/

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

3 个答案:

答案 0 :(得分:3)

/\bpre-\S*\s?/g可以正常工作,假设您也要删除尾随空格(根据您的示例)。如果您想将其保留,请使用/\bpre-\S*/g

<强>校正

\b只查找单词字符,-绝对不是单词字符。不幸的是,JavaScript不支持自定义外观。

/(\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);

答案 1 :(得分:1)

使用此

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

答案 2 :(得分:1)

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)

之外,我们删除了所有内容