我被一个正常的表达困住了 我试图匹配使用正则表达式以给定前缀开头的每个子字符串 在javascript中
prefix = "pre-"
regex = /???/
"pre-foo-bar bar pre-bar barfoo".replace(regex, '')
// should output "bar barfoo"
答案 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>');
我们查找以空格开头或字符串(^|\s)
开头的字符串,该字符串必须以pre-
开头,我们将所有非空格字符后跟一个或多个空格或字符串\S*(?=\s+|$)
的结尾。除了字符串$1
的初始空格/开头(引用(^|\s)
)