mark.js example with regular expression
This fiddle demonstrates how to use julmot/mark.js with regular expression
by Julian
HTML
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.6/superhero/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/mark.js/8.6.0/jquery.mark.min.js"></script>
<h2><a href="https://markjs.io/" target="_blank">mark.js</a> example with custom regular expressions</h2>
<div class="panel panel-default">
<div class="panel-heading">Search</div>
<div class="panel-body">
<div class="search row">
<div class="col-xs-6">
<span>Type in a regular expression:</span>
<input type="text" name="regex" class="form-control input-sm" placeholder="/Lor[^]?m/gmi">
<button type="button" name="mark" class="btn btn-primary">Mark</button>
</div>
<div class="col-xs-6">
<span>Search options:</span>
<input type="checkbox" name="opt[]" value="debug"> debug
<br>
<span>There are a lot more <a target="_blank" href="https://markjs.io/configurator.html">options</a>!</span>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body context">
<p>
Lorem ipsum dolor sit āmet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, nò sea takimata
sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam...
CSS
body {
margin: 15px;
}
div.search span,
div.search input[name="regex"] {
display: block;
}
div.search input[name="regex"],
button {
margin-top: 4px;
}
div.panel {
margin-bottom: 15px;
}
div.panel .panel-body p:last-child {
margin-bottom: 0;
}
mark {
padding: 0;
}
JavaScript
$(function() {
var mark = function() {
// Read input
var inputstring = $("input[name='regex']").val();
if (inputstring.trim() === "") {
return;
}
// Create regex
var flags = inputstring.replace(/.*\/([gimy]*)$/, '$1');
var pattern = inputstring.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1');
var regex = new RegExp(pattern, flags);
// Determine selected options
var options = {};
$("input[name='opt[]']").each(function() {
options[$(this).val()] = $(this).is(":checked");
});
// Mark the regex inside the context
$(".context").unmark({
done: function() {
$(".context").markRegExp(regex, options);
}
});
};
// Trigger mark action on button click
$("button[name='mark']").on("click", mark);
});