我被一些正则表达式卡住了 我正在尝试使用正则表达式匹配以给定前缀开头的每个子字符串 在 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 不支持自定义回顾。
/(\s|^)pre-\S*/g
应该可以工作,但与上面给出的示例输出相比会有一个前导空格。这将检查“pre-”之前没有任何内容或一个空格字符,然后是 0 个或多个非空格字符。它删除了除空格之外的整个 block 。如果空间对您来说真的很重要,您可以:
str.replace(/(\s|^)pre-\S*\s?/g, function(wholeString, optionalSpaceCharacter) {
return optionalSpaceCharacter;
});
二次更正
如果你连续有两个,比如“pre-a pre-b pre-c”,我给你的复杂替换将不起作用。由于结尾处有 \s?
,您最终会得到 "pre-b "
。获得确切所需输出的最佳选择是使用 /(\s|^)pre-\S*/g
并检查原始字符串是否以“pre-”开头,如果是的话,只是从开头删除一个空格。
str.replace(/(\s|^)pre-\S*/g, '').substring(str.substring(0, 4) == "pre-" ? 1 : 0);
关于javascript - 匹配以前缀开头的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785703/