我真的不太了解正则表达式语法,但是我使用了一个简单的jQuery高亮显示插件,我需要它来选择一个单词,不管它在任意数量的不同索引中有一个或更少的撇号,或者根本没有。
例如,假设我有一个字符串:Tods (注意这个字符串可以是任何东西)。
我需要一个仍然可以选择的正则表达式:Tod's、To'ds、T'ods或'Tods。(请注意,我在最后一个索引中没有包含撇号,因为这是不必要的,尽管它可能不会对任何东西造成伤害)。
到目前为止,我在jQuery中有以下代码.:
$("input.highlightTerm").each(function () {
$(".resultValue").highlight($(this).val());
});...where $(this).val()是突出显示的字符串。
我也可以在C#中这样做,因为我使用C#填充了jQuery代码在服务器端获取的隐藏输入字段($("input.highlightTerm"))。
简单的C# Razor语法:
for (var n = 0; n < searchTermsArray.Length; n++)
{
<input class="highlightTerm" type="hidden" value="@searchTermsArray[n]" />
}我需要什么正则表达式语法来完成这个任务?
更多的应该和不应该匹配的示例:
泰奥德的应该匹配
托德应该匹配
“‘Tods”应该匹配
'Tods OR Tods‘并不重要,因为插件的工作方式,但我想应该匹配,是首选
托德不应该相配
‘托德不应该相配
--我只想在字符串中的任意数量的不同索引中有一个或更少的撇号时,才需要匹配。
发布于 2013-11-01 16:49:42
首先,确保字符串有长度,并且没有双撇号(这排除了三倍和更高的值)。然后测试字符串是否只包含单词字符或撇号。
var re = /^[\w']*$/;
function checkForApostrophe(str) {
if ( !str.length ) { return; }
if ( str.indexOf("''") !== -1 ) { return; }
if ( str.charAt(str.length-1) === "'" ) { return; }
return re.test(str);
}将regex中的'\w‘替换为a,可能包括0-9 (取决于您的需求)。
这个问题有点难理解你到底想要什么,所以如果这不太正确,请评论。
发布于 2013-11-01 20:06:40
我想,在阅读了其他答案的评论后,我已经明白了你想要的是什么。您不需要一个可以对任何可能的输入执行此操作的正则表达式,您已经有了输入,并且需要构建一个与其及其变体相匹配的正则表达式。你需要做的就是这个。
var re = new RegExp("'?" + "tods".split("").join("'?") + "'?")这将创建一个与您所描述的方式相匹配的正则表达式,前提是它也与原始字符串匹配。
在本例中,上面的行构建此正则表达式:
/'?t'?o'?d'?s'?/这可能还不是百分之百正确。你知道,因为我周围没有突出的功能,但我认为它应该让你走上正确的轨道。
发布于 2013-11-01 16:41:22
我觉得你必须这样做!
function checkForApostrophe(str) {
var length = str.length;
if (length != 0)
{
// Makes sure string contains only Alphabets, numbers and apostrophe : Nothing else
if (str.matches("[a-zA-Z0-9']*")) {
// makes sure there is only one or zero apostrophe
if ((str.indexOf("'") != -1) && (str.indexOf("'") == str.lastIndexOf("'"))) {
// Makes sure there is no apostrophe stranded at the end
if (str.lastIndexOf("'") == length - 1)
return false
else
return true;
}
else {
return false;
}
}
else {
return false;
}
}
}https://stackoverflow.com/questions/19730634
复制相似问题