[英]Regex string ends with not working in Javascript
我对正则表达式不是很熟悉。 我试图测试一个字符串是否以另一个字符串结尾。 当我期望为真时,下面的代码返回 null。 代码有什么问题?
var id = "John";
var exists ="blahJohn".match(/id$/);
alert(exists);
好吧,使用这种方法,您需要使用RegExp
构造函数,使用您的id
变量构建正则表达式:
var id = "John";
var exists = new RegExp(id+"$").test("blahJohn");
alert(exists);
但是有很多方法可以实现这一点,例如,您可以获取字符串的最后一个id.length
字符,并将其与id
进行比较:
var id = "John";
var exist = "blahJohn".slice(-id.length) == id; // true
您需要使用RegExp()
对象来执行此操作,而不是文字:
var id = "John",
reg = new RegExp(id+"$");
alert( reg.test("blahJon") );
也就是说,如果您在运行前不知道要测试的值。 否则你可以这样做:
alert( /John$/.test("blahJohn") );
我喜欢@lonesomeday 的解决方案,但我喜欢在这些场景中扩展 String.prototype。 这是我对他的解决方案的改编
String.prototype.endsWith = function (needle) {
return needle === this.substr(0 - needle.length);
}
所以可以检查
if(myStr.endsWith("test")) // Do awesome things here.
可口...
var id = "John";
(new RegExp(`${id}$`)).test('blahJohn'); // true
(new RegExp(`${id}$`)).test('blahJohna'); // false
`${id}$` 是一个 JavaScript 模板字符串,将被编译为 'John$'。
RegExp 中 John 之后的$
代表字符串结尾,因此被测试的字符串必须在 id 值(即 John)之后没有任何内容才能通过测试。
new RegExp(`${id}$`) - 将其编译为/John$/
(所以如果 id 不应该是动态的,你可以只使用 /John$/ 而不是 new RegExp(`${id}$`) )
尝试这个 -
var reg = "/" + id + "$/";
var exists ="blahJohn".match(reg);
更好的方法是使用RegExp.test
:
(new RegExp(id + '$')).test('blahJohn'); // true
(new RegExp(id + '$')).test('blahJohnblah'); // false
更好的是构建一个像这样的简单函数:
function strEndsWith (haystack, needle) {
return needle === haystack.substr(0 - needle.length);
}
strEndsWith('blahJohn', id); // true
strEndsWith('blahJohnblah', id); // false
如果您需要它来替换功能,请考虑以下 regExp:
var eventStr = "Hello% World%";
eventStr = eventStr.replace(/[\%]$/, "").replace(/^[\%]/, ""); // replace eds with, and also start with %.
//输出:eventStr = "Hello% World";
var id = new RegExp("John");
var exists ="blahJohn".match(id);
alert(exists);
尝试这个
为什么使用正则表达式? 它的价格昂贵。
function EndsWith( givenStr, subst )
{
var ln = givenStr.length;
var idx = ln-subst.length;
return ( giventStr.subst(idx)==subst );
}
更容易和更具成本效益,是吗?
刚刚创建了这个辅助函数,我发现它比修改正则表达式并每次都重新创建一个更有用和更干净。
/**
* @param {string} str
* @param {RegExp} search
* @returns {boolean}
*/
function regexEndsWith (str, search, {caseSensitive = true} = {})
{
var source = search.source
if (!source.endsWith('$')) source = source + '$'
var flags = search.flags
if (!caseSensitive && !flags.includes('i')) flags += 'i'
var reg = new RegExp(source, flags)
return reg.test(str)
}
以这种方式使用它:
regexEndsWith('can you Fi nD me?', /fi.*nd me?/, {caseSensitive: false})
这是一个使用正则表达式的字符串原型函数。 您可以使用它来检查是否有任何字符串对象以特定的字符串值结尾:
原型功能:
String.prototype.endsWith = function (endString) {
if(this && this.length) {
result = new RegExp(endString + '$').test(this);
return result;
}
return false;
}
示例用法:
var s1 = "My String";
s1.endsWith("ring"); // returns true;
s1.endsWith("deez"); //returns false;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.