javascript在textarea

时间:2017-12-07 04:30:31

标签: javascript regex

我有一个带有罗马数字列表的文本区域,我希望通过单击按钮将其转换为阿拉伯数字。如何仅替换整数而不替换其他数字的部分。例如,我有:

XI
XXI
XXXI

我得到了

11
X11
XX11

但我想要

11
XXI
XXXI

我使用的代码是:

function romanToArabic() {

  var str = document.getElementById("textArea").value;

  var mapObj = {
    XI:"11",
    V:"5" 
  };

  var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
  str = str.replace(re, function(matched){
    return mapObj[matched];
  });

  document.getElementById("textArea").value = str;

}

我已经看过使用\ b的各种解决方案,但我无法弄清楚将它放在我的代码中的哪个位置。感谢。

3 个答案:

答案 0 :(得分:3)

我接受了你的规范并通过以下方式完成了工作"

  • 定义正确的正则表达式\b[XIV]+\b(匹配整个罗马数字)
  • 将您的对象用作映射函数,如果失败则使用后备,mapObj[roman] || roman

脚本没有做什么:

  • 抓住非法罗马数字,即允许XIIX
  • 为匹配实施适当的算法,例如XV,理想情况下应解析为10 + 5 = 15



function fromRoman(roman) {
  var mapObj = {
    XI:"11",
    V:"5" 
  };
  return mapObj[roman] || roman;
}

function convertFromRoman() {
  var str = document.getElementById("textArea").value;
  var output = str.replace(/\b[XIV]+\b/g, fromRoman);
  document.getElementById("output").value = output;
}

convertFromRoman();

<p>Input:</p>

<textarea id="textArea" style="width:100%; height:50px" onkeyup="convertFromRoman()">
XI
XXI
XXXI
</textarea>

<p/>

<p>Output:</p>

<textarea id="output" style="width:100%; height:50px">
</textarea>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您需要的是将\\b添加到正则表达式的开头和结尾。它将匹配整个单词。

function romanToArabic() {

  var str = document.getElementById("textArea").value;

  var mapObj = {
    XI:"11",
    V:"5" 
  };

  var re = new RegExp("\\b(" + Object.keys(mapObj).join("|") + ")\\b","gi");
  str = str.replace(re, function(matched){
    return mapObj[matched];
  });

  document.getElementById("textArea").value = str;

}
<textarea id="textArea" style="width: 400px; height: 100px"></textarea>
<br />
<button onClick="romanToArabic()">Convert</button>

答案 2 :(得分:0)

这是另一种方法,只需将textArea值拆分为新行('\n')

var val=["XI", "XXI", "XXXI"]; // $("textarea").val().split('\n');
var outPut = [];
$.each(val, function(index, object) {
 if(object.length == 2){
   outPut.push(object.replace("XI",'11'));
 }else{
    outPut.push(object);
}
 console.log(outPut[outPut.length-1]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>