我们有一个简单的基于 JS 的输入文本清理,可以使用 regExp 提取特定的标记。其格式为 <CHAR>-<NUMBER>
。其示例代码如下。试图扩展它以支持 <CHAR>/<NUMBER>
格式或者 。请告诉我如何将其添加到现有公式中,或者欢迎更好的想法。
示例:还应包含 MR/56743 或 MR56743 格式的 token 。
脚本的工作方式是:在文本框中输入任何内容,然后在焦点消失时,它会自动清理不匹配的内容,仅将匹配的标记作为逗号分隔值。
<html>
<body>
<script type="text/javascript">
var supported = ['ABCDE', 'XZY', 'IR'].sort();
var pattern = new RegExp(supported.join("-\\d+|") + "-\\d+", "gi");
function filter(raw_input) {
var raw_text = document.getElementById("raw_text").value;
document.getElementById("raw_text").value = raw_text.match(pattern);
}
</script>
<div id="content" style="width:800px;margin:0 auto;text-align:left">
Input the scramble for cleanup: </br>
<textarea rows="10" cols="80" name="samplebox" id="raw_text" onchange="filter()"></textarea>
</br>
</div>
</html>
</body>
最佳答案
Token of the format
MR/56743
orMR56743
should be included as well.
您的正则表达式中有 -
。它匹配一个 -
。如果要匹配一组字符中的 1 个单个字符,则需要字符类 [...]
。如果您想匹配一次或零次,请在其后使用 ?
量词。
使用
var supported = ['MR', 'ABCDE', 'XZY', 'IR'].sort();
var pattern = new RegExp(supported.join("[-/]?\\d+|") + "[-/]?\\d+", "gi");
// ^^^^^ ^^^^^
function filter(raw_input) {
var raw_text = document.getElementById("raw_text").value;
var m = raw_text.match(pattern);
if (m) {
document.getElementById("raw_text").value = raw_text.match(pattern).join(" ");
} else { document.getElementById("raw_text").value = ""; }
}
<div id="content" style="width:800px;margin:0 auto;text-align:left">
Input the scramble for cleanup: </br>
<textarea rows="10" cols="80" name="samplebox" id="raw_text" onchange="filter()"></textarea></br>
</div>
关于JavaScript RegExp 和 Join 模式生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402806/