Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_String - Fatal编程技术网

使用javascript更改字符串

使用javascript更改字符串,javascript,regex,string,Javascript,Regex,String,我正在用这个正则表达式检查一个字符串:/^[SE]*[\s]*[0-9]{3}[\s\-]*[0-9]{2}$/。这一共允许9种不同的格式,分别是:XXXXX、XXX-XX、XXX-XX、SEXXXXX、SEXXX-XX、SEXXX-XX、SEXXXXX、SEXXX-XX和SEXXX-XX(X:s是0-9中的任意数字)。在9种有效格式之一的检查通过后,如何将格式更改为XXXXX 我已经阅读了很多关于string.replace()-方法的其他线程,但我似乎无法让它工作。以下是我目前的代码:

我正在用这个正则表达式检查一个字符串:
/^[SE]*[\s]*[0-9]{3}[\s\-]*[0-9]{2}$/
。这一共允许9种不同的格式,分别是:XXXXX、XXX-XX、XXX-XX、SEXXXXX、SEXXX-XX、SEXXX-XX、SEXXXXX、SEXXX-XX和SEXXX-XX(X:s是0-9中的任意数字)。在9种有效格式之一的检查通过后,如何将格式更改为XXXXX

我已经阅读了很多关于
string.replace()
-方法的其他线程,但我似乎无法让它工作。以下是我目前的代码:

        var pcValue = postalCode.value;
        var format = /^[SE]*[\s]*[0-9]{3}[\s\-]*[0-9]{2}$/;

        if (format.test(pcValue) === true) {
            pcValue = pcValue.replace(/\[SE]*[\s]*[\s\-]*$/, /^[0-9]{5}$/);
        }
它给我的是一个带有
/^[0-9]{5}$/
的字符串,而不是我想要的XXXXX格式。

您可以这样做:

var format = /^([SE]*)\s*(\d{3})[\s\-]*(\d\d)$/;
if (format.test(pcValue)) {
    pcValue = pcValue.replace(format, "$2$3");
}
请注意,如果
test
返回true,则您不必进行任何测试,只需执行替换即可。

尝试以下操作:

var pcValue = postalCode.value;
var format = /^[SE]*[\s]*[0-9]{3}[\s\-]*[0-9]{2}$/;

if (format.test(pcValue) === true) {
    pcValue = pcValue.replace(/\[SE]*[\s]*[\s\-]*$/, /^[0-9]{5}$/);
}

str.replace(original,replicant);
var pcValue = postalCode.value;
pcValue = pcValue.replace(/^[SE]*[\s]*([0-9]{3})[\s\-]*([0-9]{2})$/, "$1$2");
演示

您标记为已接受的答案也会验证这些类型的输入:

“ES 12345”
“SSS 123-45”
“SESE 123---45”
以下正则表达式可能更适合您的需要:

function parse(input) {
    var re = /^(?:SE)?\s?(\d{3})(?:\s|-)?(\d\d)$/;
    return re.test(input) && input.replace(re, '$1$2');
}
var input1=parse('SE 123 45');//12345
var input2=parse('ES 123 45');//假的
输入1 | |警报('请修复输入1!');
input2 | |警报('请修复输入| 2!');//警觉的!
关于
/^(?:SE)?\s?(\d{3})(?:\s |-)?(\d\d)$/
的一些帮助:

^…$string边界
(…)捕获匹配
(?:…)不捕获匹配项
(?:SE)?“SE”,零次或一次
\s?空白,零或一次
(\d{3})3位数字(捕获->1美元)
(?:\s |-)?空白或破折号,零或一次
(\d\d)2位数字(捕获->2美元)

关于正则表达式的更多信息:。

它可以工作,但如果一开始有一个SE,它在替换之后仍然存在。我该如何删除它呢?@Lemonmuncher编辑后删除了缝制的像一个符咒!甚至删除了最终的SE。