这一定是某个地方......但是在浪费了相当多的时间之后,我找不到它:
我想测试一个字符串匹配:"in"+ * +"ing"
。
换句话说,
“ trest ing ”应导致true
,而
“ in sist”和“str ing ”应该会失败。
我只对测试单个字感兴趣,没有空格。
我知道我可以在两次测试中做到这一点,但我真的想做到这一点。一如既往,感谢您的帮助。
答案 0 :(得分:6)
如果您特别想要匹配单词,请尝试以下方法:
/in[a-z]*ing/i
如果你想要“in”后跟任何字符,然后是“ing”,那么:
/in.*ing/i
第二个i
之后的/
使其不区分大小写。如果你想在“in”和“ing”之间至少有一个字符,可以用*
替换+
; *
匹配零或更多。
给定字符串中的变量,您可以使用正则表达式来测试匹配,如下所示:
var str = "Interesting";
if (/in[a-z]*ing/i.test(str)) {
// we have a match
}
<强>更新强>
“如果前缀和后缀存储在变量中会怎么样?”
然后,如上所示,不使用正则表达式文字,而是使用new RegExp()
并传递表示模式的字符串。
var prefix = "in",
suffix = "ing",
re = new RegExp(prefix + "[a-z]*" + suffix, "i");
if (re.match("Interesting")) {
// we have a match
}
到目前为止,我所展示的所有正则表达式都会在较大字符串中的任何位置匹配“in”某些“ing”模式。如果想要测试整个字符串是否匹配该mattern,以便“有趣”是匹配但“noninteresting”不会(根据stackunderflow的注释),那么你需要匹配字符串的开头和结尾{{1 }和^
:
$
或者来自变量:
/^in[a-z]*ing$/i
或者,如果您正在测试整个字符串,则不一定需要正则表达式(尽管我发现正则表达式更简单):
new RegExp("^" + p + "[a-z]*" + s + "$", "i")
或者对于不支持.endsWith()的浏览器:
var str = "Interesting",
prefix = "in",
suffix = "ing";
str = str.toLowerCase(); // if case is not important
if (str.indexOf(prefix)===0 && str.endsWith(suffix)){
// match do something
}
“我能读到的关于这个主题的最佳内容是什么?”
MDN给出了JavaScript的正则表达式的概要。 regular-expressions.info提供了更为通用的教程。
答案 1 :(得分:1)
答案 2 :(得分:1)
/in.+ing/ // a string that has `in` then at least one character, then `ing`
/in.+ing/.test('interesting'); // true
/in.+ing/.test('insist'); // false
/in.+ing/.test('string'); // false
/in.+ing/.test('ining'); // false, .+ means at least one character is required.
/in.*ing/.test('ining'); // true, .* means zero or more characters are allowed.
如果您想将事物限制为一个单词,则可以使用\w
字符速记。
/in\w+ing/.test('invents tiring') // false, space is not a "word" character.
/in.+ing/.test('invents tiring') // true, dot matches any character, even space
答案 3 :(得分:1)
如果第一条规则中的in
可以成为ing
(第二条规则)的一部分,请使用
/\b(?=in)(?=\w*ing\b)\w+/g
请参见proof。
说明
--------------------------------------------------------------------------------
\b the boundary between a word char (\w) and
something that is not a word char
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
in 'in'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
\w* word characters (a-z, A-Z, 0-9, _) (0 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
ing 'ing'
--------------------------------------------------------------------------------
\b the boundary between a word char (\w)
and something that is not a word char
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
\w+ word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
如果in
不属于ing
,请使用
/\bin\w*ing\b/g
请参见proof。
说明
--------------------------------------------------------------------------------
\b the boundary between a word char (\w) and
something that is not a word char
--------------------------------------------------------------------------------
in 'in'
--------------------------------------------------------------------------------
\w* word characters (a-z, A-Z, 0-9, _) (0 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
ing 'ing'
--------------------------------------------------------------------------------
\b the boundary between a word char (\w) and
something that is not a word char
JavaScript *:
const string = 'interesting,ing and bing.';
const rx_1 = /\b(?=in)(?=\w*ing\b)\w+/g;
const rx_2 = /\bin\w*ing\b/g;
console.log(string.match(rx_1));
console.log(string.match(rx_2));
答案 4 :(得分:0)
我也建议匹配字边界。
这是一个完全参数化的版本:
<强>代码强>
(function(prefix, suffix, anchored, flags) {
var tests = [
"noninterestingtypo",
"mining",
"in8ping",
"interesting"];
var re = new RegExp(
(anchored ? '\\b' : '') + prefix + '[a-z]+' + suffix + (anchored ? '\\b' : ''), flags);
var reportMatch = function(value) {
console.log(value.match(re) ? value + " matches" : value + " does not match");
};
tests.forEach(reportMatch);
})( /* prefix, suffix, anchored, flags */
"in", "ing", true, "i");
<强>输出强>
noninterestingtypo does not match
mining does not match
in8ping does not match
interesting matches
只需展开测试字符串数组,看看没有\b
会发生什么。