总的来说,我想实现JavaScript日期值的格式化函数,这些值接受类似于Java/C#格式的字符串:"dddd/mm/yy“等等。
我当前的问题范围是-我有一个带有d‘s的字符串。
'd/dd/ddd/dddd'
'dd/d/ddd'
'dddd ddd /dd'd's之间的空白可以是单个/更多的空格,也可以是:(冒号)或/ (斜杠),也可以是所有这些字符(可能是一个或两个或三个字符)。示例:
'dd/dddd:ddd d'
'dd:/ddd d d'如果是的话
d,我应该用'somestring1'替换(意味着我有一些字符串来替换那个特定的d)d,用'someotherString2'代替d,用'someotherotherstring'代替d,用'someotherotherotherstring'代替具有各自的间距或:(冒号)和/(斜杠)
我正在尝试使用正则表达式。
发布于 2013-08-02 06:46:37
用两种替换方法很容易:
var res = "'dd/dddd:ddd d'".replace(/d(?![^d])/g, '0')
.replace('d', '1');它的意思是“用0替换所有'd‘,而不是’non‘”,然后用1替换所有剩余的'd’。
你甚至可以用另一种方式来做:
var res = "'dd/dddd:ddd d'".replace(/d(?=d)/g, '0')
.replace('d', '1');它的意思是“用0替换所有的'd‘和'd’,然后用1替换剩下的'd‘。
如果要在替换中使用函数,可以这样做:
var res = "'dd/dddd:ddd d'".replace(/(d(?=d))|(d)/g,
function(match, p1, p2) {
return p1 ? '0' : '1';
}
);结果是一样的。我们有两个捕获组,一个用于“d”,另一个用于“d”,另一个用于其余的“d”(S)。这些匹配被传递给一个函数,该函数在p1和p2中接收捕获。显然,对于每个匹配,只能定义一个捕获(p1或p2) (因为它们是可选的),所以使用三元操作符?,我检查p1是否有一个值,然后返回0,否则返回1。
表示已更改的问题
如果要用字符串数组替换,可以执行以下操作:
var replaces = [ "some1", "some2", "some3", "some4" ];
var res = "'dd/dddd:ddd d ddddd'".replace(/d+/g,
function(match) {
return match.length - 1 < replaces.length ? // check if there is a substitution
replaces[match.length - 1] : // if there is a substitution
match; // otherwise leave the d(s)
}
);发布于 2013-08-02 06:48:31
既然你已经提到这是为了约会,我猜1,01,001等并不是唯一可能的替代。
因此,您可以找到任何一个d或d的组与/d+/。
var revised = original.replace(/d+/, function (dees) {
return // ...;
});在function中,可以测试dees.length以确定要return的值。
关于你列举的例子:
if (dees.length == 1) {
return 'somestring1';
} else if (dees.length == 2) {
return 'someotherString2';
} else if (dees.length == 3) {
return 'someotherotherstring';
} else if (dees.length == 4) {
return 'someotherotherotherstring';
}还可以使用Object或Array将length与键或索引匹配。
var results = {
1: 'somestring1',
2: 'someotherString2',
3: 'someotherotherstring',
4: 'someotherotherotherstring'
];
return results[dees.length] || 'somethingelse';发布于 2013-08-02 07:00:35
数字值的基本格式可以不用regex使用更简单的代码来处理:
var format = "dddd/ddd/dd/d";
var result = format.replace("dddd", formatWithFourDigits(year))
.replace("ddd", formatWithThreeDigits(year))
.replace("dd", formatWithTwoDigits(year))
.replace("d", formatWithOneDigits(year));对于更复杂的问题,首先将字符串标记化,然后将每个令牌(如"dddd")映射到为该格式执行格式设置的函数。标记化可以使用类似于其他答案中所示的正则表达式来完成。
https://stackoverflow.com/questions/18010328
复制相似问题