如何检查相邻的字符是什么?

时间:2016-01-18 03:05:11

标签: javascript jquery regex

我正在创建一个降价编辑器,我需要检查邻居字符是否是特定字符,然后删除它们,否则附加它们。

例如,我想检查所选文本,拖曳邻居字符为function getSelection(elem) { var selectedText; if (document.selection != undefined) { // IE elem.focus(); var sel = document.selection.createRange(); selectedText = sel.text; } else if (elem.selectionStart != undefined) { // Firefox var startPos = elem.selectionStart; var endPos = elem.selectionEnd; selectedText = elem.value.substring(startPos, endPos) } return selectedText; } $(document).on('mousedown', 'button', function(e) { var selection = getSelection( $('#txtarea').get(0) ); alert(selection); });,然后删除它们,否则将它们附加到所选文本周围。

我可以使用这种方法获得选定的文字:



<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="txtarea">this is a test</textarea>
<button>Bold (toggle)</button>
&#13;
**
&#13;
&#13;
&#13;

现在我需要当用户点击该按钮时,它会检查选定的文字是否在**selectedtext**之间selected text,然后像**selectedtext**一样将其删除,否则就像这样// ----- DIAGNOSE SELECTION ----- // var res5 = str.replace("antrian", "diagnosa").replace("periksa", "getData"); $("#diagnosa").select2({ placeholder: "Ketik untuk mencari diagnosa pasien...", minimumInputLength: 3, multiple: true, ajax: { url: res5, dataType: 'json', delay: 250, data: function (params) { return { q: params.term // search term }; }, processResults: function (data) { var results = []; // parse the results into the format expected by Select2. // since we are using custom formatting functions we do not need to // alter the remote JSON data $.each(data, function(index, item){ results.push({ id: item.kd_diagnosa, text: item.nm_diagnosa }); }); console.log(results); return { results: results }; }, cache: true } }); // ----- DIAGNOSE SELECTION ----- // 1}}。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

在此之前,我想提及那里的所有降价编辑:https://www.google.de/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=javascript%20markdown%20library

所以:不要试图重新发明轮子,等等。

但是为了学习,我的方法看起来像这样:

function toggleMarker(marker, el) {
var markerLength = marker.length;
var startPos, endPos, selection, range;

if (document.selection != undefined) { // IE
    el.focus();
    range = document.selection.createRange();
    selection = range.text;
} else if (el.selectionStart != undefined) { // Firefox
    startPos = el.selectionStart;
    endPos   = el.selectionEnd;
    selection = el.value.substring(startPos, endPos);
}

if (!selection.length){
        return;
}



if (el.value.substring(startPos-markerLength,startPos) === marker
        && el.value.substring(endPos,endPos+markerLength) === marker
){
        el.value = el.value.substring(0,startPos-markerLength) +
                            selection + 
              el.value.substring(endPos+markerLength);
}
else{
        el.value = el.value.substring(0,startPos) + marker + 
                            selection + marker + el.value.substring(endPos);
}

}

$(document).on('mousedown', 'button', function(e) {
  toggleMarker( $(this).data('marker'), $('#txtarea').get(0) ).text;
});

查看实际操作:https://jsfiddle.net/t4ro53v8/4/

该解决方案采用非常通用的方法:将切换标记设置为自定义数据属性,以便于重用代码。

该功能仅针对非IE案例实施。您必须检查,如何确定IE中范围的startPos和endPos。

在所有其他浏览器中:

  1. 确定选择
  2. 如果没有选择任何内容,则不执行任何操作
  3. 根据给定的标记
  4. 检查选择的环境
  5. 如果两个标记都存在,则会被删除
  6. 否则插入标记
  7. 作为概念证明,这个例子就像一个魅力。 但是有一些缺点:

    • 如何区分粗体文字(**)和斜体(*)?
    • 如何处理仅出现在选择的一侧的标记
    • 如果选择了标记怎么办?

    但那是你现在要解决的问题......

答案 1 :(得分:0)

您可以使用正则表达式来查找** **模式的​​出现。这个正则表达式将帮助您找到类似于您所拥有的模式。

[*][*][a-z]*[*][*]

使用exec()方法,可以帮助您提取特定文本。

使用.length检查其长度,如果为4,则两者之间没有任何内容,您可以将其替换为**所包围的新文本,

"**"+ newtext+"**"

要删除**,您可以使用replace()方法,将**替换为大约空格。