Ví dụ về một Boolean (AND) cộng với tìm kiếm ký tự đại diện, mà tôi đang sử dụng bên trong một Autocomplete Plugin javascript:
string để phù hợp với: "lời Chúa của tôi"
string để tìm kiếm: "tôi đang tìm kiếm các từ hài hước của tôi bên trong văn bản này"
Bạn cần regex sau: /^(?=.*my)(?=.*word).*$/im
Giải thích:
^ vị trí khẳng định lúc bắt đầu của một dòng
= Positive lookahead
?.* trận đấu bất kỳ ký tự (trừ newline)
() Groups
$ khẳng định vị trí ở cuối của một dòng
i modifier: không nhạy cảm. Khớp không phân biệt chữ hoa chữ thường (bỏ qua trường hợp của [a-zA-Z])
m công cụ sửa đổi: nhiều dòng. Nguyên nhân^và $ để phù hợp với bắt đầu/kết thúc của mỗi dòng (không chỉ bắt đầu/kết thúc của chuỗi)
Kiểm tra các Regex đây: https://regex101.com/r/iS5jJ3/1
Vì vậy, bạn có thể tạo một hàm javascript rằng:
- Thay regex reserved ký tự để tránh các lỗi
- Tách chuỗi tại chỗ
- Encapsulate lời của bạn bên trong nhóm regex
- Tạo một mô hình regex
- Execute trận đấu regex
Ví dụ:
function fullTextCompare(myWords, toMatch){
//Replace regex reserved characters
myWords=myWords.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
//Split your string at spaces
arrWords = myWords.split(" ");
//Encapsulate your words inside regex groups
arrWords = $.map(arrWords, function(n) {
return ["(?=.*"+n+")"];
});
//Create a regex pattern
sRegex = new RegExp("^"+arrWords.join("")+".*$","im");
//Execute the regex match
return(toMatch.match(sRegex)===null?false:true);
}
//Using it:
console.log(
fullTextCompare("my word","I'm searching for my funny words inside this text")
);
//Wildcards:
console.log(
fullTextCompare("y wo","I'm searching for my funny words inside this text")
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Nguồn
2016-06-08 03:04:24
Tôi chỉ cố gắng nó trên http://regexpal.com/. Không có điếu xì gà. Có lẽ đây là một lỗi với regexpal? – user366735
Xin lỗi. Nevermind, điều đó có ý nghĩa. Cảm ơn bạn. – user366735
Bạn có làm điều này để làm việc trên regexpal? Tôi không thể. – paragbaxi