我真的不太了解正则表达式语法,但我正在使用jQuery的简单突出显示插件,我需要它来选择一个单词是否在任意数量的不同索引处有1个或更少的撇号或完全没有。
例如,假设我有一个字符串:Tods
(请注意,此字符串可以为任何东西)。
我需要一个仍然可以选择的正则表达式:Tod's
,To'ds
,T'ods
或'Tods
。 (请注意,我没有在最后一个索引中包含撇号,因为这不是必需的,但是,可能不会伤害任何东西)。
到目前为止,我在jQuery中有这个代码......:
$("input.highlightTerm").each(function () {
$(".resultValue").highlight($(this).val());
});
...其中$(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]" />
}
我需要完成这个的正则表达式语法是什么?
应该和不应该匹配的更多示例:
T'o'd's [应该匹配]
Tod's [应该匹配]
'Tods'[应该匹配]
'Tods OR Tods'[真的没关系,因为插件有效,但我猜应该匹配,是首选]
Tod'的[不应该匹配]
''Tods [不应该匹配]
- 如果字符串中任意数量的不同索引中有1个或更少的撇号,我几乎只想要匹配。
答案 0 :(得分:2)
首先确保字符串具有长度并且没有双撇号(这排除了三元组和更高)。然后测试字符串是否只包含单词字符或撇号。
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);
}
用[a-zA-Z]替换正则表达式中的'\ w',可能包括[0-9],具体取决于您的要求。
问题有点难以理解你想要什么,所以如果这不是很正确请发表评论。
答案 1 :(得分:2)
我认为在阅读了其他答案的评论之后,我已经弄明白你的目标是什么。您不需要可以为任何可能的输入执行此操作的单个正则表达式,您已经具有输入,并且您需要构建与其及其变体匹配的正则表达式。你需要做的就是这个。
var re = new RegExp("'?" + "tods".split("").join("'?") + "'?")
这将创建一个与您描述的方式匹配的正则表达式,只要它也与原始字符串匹配即可。
在这种情况下,上面的行构建了这个正则表达式:
/'?t'?o'?d'?s'?/
这可能仍然不是100%正确。你知道,因为我没有自己的高亮功能可以玩,但我认为它应该让你走在正确的轨道上。
答案 2 :(得分:1)
我认为你必须做这样的事情!
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;
}
}
}