Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中使用正则表达式替换文本_Javascript_Regex - Fatal编程技术网

在JavaScript中使用正则表达式替换文本

在JavaScript中使用正则表达式替换文本,javascript,regex,Javascript,Regex,我想替换一个简单的文本,如: 1天前到Hace 1 dia 我尝试了以下代码,但不起作用: var texto = "1 day ago"; texto = texto.replace('/\d+(?=day ago)/', "Hace $1 dia"); 应该是 texto = texto.replace(/(\d+) days? ago/, "Hace $1 dia"); 应该是 /(\d+) day ago/i 我对它进行了一些扩展,以允许使用“N天前”。请记住,语言并不适合用正则表

我想替换一个简单的文本,如: 1天前到Hace 1 dia

我尝试了以下代码,但不起作用:

var texto = "1 day ago";
texto = texto.replace('/\d+(?=day ago)/', "Hace $1 dia");
应该是

texto = texto.replace(/(\d+) days? ago/, "Hace $1 dia");
应该是

/(\d+) day ago/i

我对它进行了一些扩展,以允许使用“N天前”。

请记住,语言并不适合用正则表达式进行翻译。当两天前发生了什么事情时会发生什么?那么正则表达式就不匹配了…@carlpett语言当然适合正则表达式的工作,尽管你是正确的,这种情况通常发生在较低层次的形态分析中,比如这里检测复数名词的屈折变化。然后你会考虑到公式化转换“NUMBER PERIOD[lang=en]ago”=>“hace NUMBER PERIOD[lang=es]”可能需要几天的英语句点,也可能需要几个小时或几个星期等,你需要将这些句点映射到西班牙语,或者如何将数字拼写为四个甚至“2.5”或2.5。请注意,简单的正则表达式甚至在“2.5天前”上都搞砸了。真正的语言很难。如果数字和单词“天”和“以前”之间有一个以上的空格呢。也许更好:texto=texto.replace(/(\d+)\s+天?\s+天/i,“直径1美元”);我同意,但我想它不应该贪婪,因此
texto=texto.replace(/(\d+)\s+?days?\s+?ago/I,“Hace$1 dia”)。但是我认为asker没有这些场景,所以保持regexp模式简单运行得更快。编写的代码是错误的。您无法将“3天前”映射为“hace 3 día”,因为您丢失了复数标记。您需要保存“s”并将其附加到“días”中。Por ejampo:
texto.replace(/(\d+)day(s?)ago/i,“hace$1 día$2”)
。但是如果有,您需要抓住“s”和“days”的结尾,并将其放回“dias”的结尾。“1天”=>“1天”(un dia),但“3天”=>“dia”。只需将其设置为
texto.replace(/(\d+)天前/i,“Hace$1 dia$2”)
var texto = "1 day ago";
texto = texto.replace(/(\d+) day(s?) ago/i, "Hace $1 dia$2");