【发布时间】:2020-11-25 06:33:45
【问题描述】:
我正在寻找一个正则表达式来用一个空格替换所有前导制表符(每个前导制表符一个空格。
// input text with two leading tab characters and two tab characters elsewhere in the text
var input=" Some text containing tabs";
// A:
console.log(input.replace(/\t/g, "LEADING_TAB_"));
// prints: "LEADING_TAB_LEADING_TAB_Some textLEADING_TAB_LEADING_TAB_containing tabs"
// B:
console.log(input.replace(/\t/, "LEADING_TAB_"));
// prints: "LEADING_TAB_ Some text containing tabs"
// C:
console.log(input.replace(/^(\t)*/, "LEADING_TAB_"));
// prints: "LEADING_TAB_Some text containing tabs"
// D:
console.log(input.replace(/\t/gy, "LEADING_TAB_"));
// prints: "LEADING_TAB_LEADING_TAB_Some text containing tabs"
// E:
console.log(input.replace(/\t/y, "LEADING_TAB_"));
// prints: "LEADING_TAB_ Some text containing tabs"
在 js fiddle 中看到这个:https://jsfiddle.net/onebcvu4/2/
答案 D 对我有用。
input.replace(/\t/gy, " ")
但我真的不明白为什么。尤其是因为,根据MDN documentation,全局 (G) 标志在与粘性标志一起使用时应该被忽略。
定义为粘性和全局的正则表达式忽略全局标志。
任何人都可以澄清或提供另一种可行的解决方案吗?
【问题讨论】:
-
我必须记住
gy的把戏。不错.... -
哇真的很高兴找到这个。偶尔,封闭的问题四处寻找,可以有很大的回报,这肯定是那些时代之一。在阅读此问答之前,我什至不知道 y 标志存在,然而,它似乎正是我想要的。
标签: javascript regex